Войти
ПрограммированиеФорумВеб

GET HTTP Запрос

#0
22:48, 20 окт. 2012

Я посылаю через TCP на "77.88.221.50:80" (google)  запрос  "GET /translate_a/t?client=x&text={dog} HTTP/1.1".

Получаю в ответ :

HTTP/1.1 200 OK
Pragma: no-cache
Date: Sat, 20 Oct 2012 11:21:16 GMT
Expires: Sat, 20 Oct 2012 11:21:16 GMT
Cache-Control: private, max-age=600
Content-Type: text/javascript; charset=UTF-8
Content-Language: ru
X-Content-Type-Options: nosniff
Content-Disposition: attachment
Content-Encoding: gzip
Server: HTTP server (unknown)
Content-Length: 89
X-XSS-Protection: 1; mode=block 

но самого перевода нет и не понимаю как получить, он должен приходить в виде JSON,но на мой клиент не приходит ни единой строчки(если через браузер тоже самое то придет файл с переводом)

У меня такое впечатление что гугл ждет от меня еще одного запроса на получение 2 части (самого перевода).

питался найти что то в интернете но точно ответа так и не нашел :( (Через FireBug смотрел что посылает FireFox но там тоже самое что и я(соответствено я оттуда этот запрос и взял,возможно в нем надо поменять что то ?)


#1
23:07, 20 окт. 2012

Приведен только хидер, поидее после него должно быть 2 переноса и ответ в 89 байт(упаковано gzip)

#2
23:14, 20 окт. 2012

Спасибо за ответ, ну так вот в том и проблема что я не понимаю как получить "ответ в 89 байт(упаковано gzip)" ? После тех строк что я написал больше ничего не приходит на порт моего клиента (Delphi Indy. TIdTCPClient). Что надо сделать что бы получить ?)) (точней 2 переноса вроде как приходят)

#3
23:24, 20 окт. 2012

Возможно тут теряется ответ :

s:string;

s:=Form1.IdTCPClient1.ReadLn;
?
#4
23:33, 20 окт. 2012

а показать тело ответа?

у меня запрос

curl http://77.88.221.50/translate_a/t?client=x&text=dog

вернул html-ку с текстом "Your client does not have permission to get URL", подозреваю надо эмулировать браузер, как-минимум указать заголовки User-Agent и Referer

Но учитывая, что гуловское апи для перевода платное, вряд ли получится считерить с такими запросам - скорее всего при превышении лимита будут лочить по ip.

#5
23:59, 20 окт. 2012
GET /translate_a/t?client=x&text={dog} HTTP/1.1
Host: translate.google.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

да понятно что лочить будут если превысить какой то лимит,но это для меня и не важно.С таким запросом как выше мне отвечает, как и браузеру( то есть все окей) но браузер получает перевод,а я нет, и я не пойму что не так делаю :(

#6
3:34, 21 окт. 2012

Прослеживай снифером все запросы полностью. Возможно, браузер их делает несколько для получения перевода.

#7
11:01, 21 окт. 2012

Спасибо за совет)) Мой клиент таки принимает данные(надо было немного поменять запрос) :

HTTP/1.1 200 OK
Date: Sun, 21 Oct 2012 05:47:45 GMT
Expires: Sun, 21 Oct 2012 05:47:45 GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Pragma: no-cache
Content-Type: text/javascript; charset=UTF-8
Content-Language: ru
X-Content-Type-Options: nosniff
Content-Disposition: attachment
Content-Encoding: gzip
Server: HTTP server (unknown)
Content-Length: 112
X-XSS-Protection: 1; mode=block

{"sentences":[{"trans":"{собака}","orig":"{собака}","translit":"{sobaka}","src_translit":"{sobaka}"}],"src":"ru","server_time":0}

Эту часть :

{"sentences":[{"trans":"{собака}","orig":"{собака}","translit":"{sobaka}","src_translit":"{sobaka}"}],"src":"ru","server_time":0}

при чтении :

s:=Form1.IdTCPClient1.ReadLn;
Form1.OnIndyClientRead(s);

в s записывается белиберда. Я так понял стринг не может принять такой тип данных...но что использовать ? IdTCPClient1.ReadBuffer ?Если да то в что читать ? побывал resive : array of byte; и Buf: array of PChar; но как то не получалось(пустые массивы).

#8
12:03, 21 окт. 2012

Понял почему не читало правильно.
Я в запросе оставил такую строчку :

Accept-Encoding: gzip, deflate
надо поменять так :
Accept-Encoding: text
Тогда гугл пришлет так :
{"sentences":[{"trans":"{собака}","orig":"{собака}","translit":"{sobaka}","src_translit":"{sobaka}"}],"src":"ru","server_time":0}

Правда надо еще поиграться с кодировкой(он присылает в UTF-8).

#9
13:46, 21 окт. 2012

Azzinoth
> Возможно тут теряется ответ :
> s:=Form1.IdTCPClient1.ReadLn;
Да, после данных нет переноса строки

ПрограммированиеФорумВеб

Тема в архиве.