![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте, возникла следующая проблема:
при отправке Get запроса сервер возвращает капчу, если этот же запрос отправить из браузера то возвращается то что нужно. Т.е. сервер каким то образом определяет что запрос отправлен IdHTTP, в свойствах компонента таких как: Request.UserAgent, Request.Accept, и т.д. прописываю то же что отправляется из браузера. Подскажите как быть. |
|
#3
|
|||
|
|||
|
Цитата:
вот ссылка http://wordstat.yandex.ru/ может у кого получиться получить данные |
|
#4
|
||||
|
||||
|
копай в сторону kiks.yandex.ru, и вообще поснифай полностью деятельность браузера на этой странице. т.к. там куча JS'ок, проверяющих на "человечность".
|
|
#5
|
|||
|
|||
|
Нужно отловить куки и посылать их при последующих запросах. Можно сделать это коряво и вручную как делал я=)
Код:
HTTP := TIdHTTP.Create(nil);
HTTP.AllowCookies:=false;
HTTP.HandleRedirects:=false; //НЕ редиректим
http.Request.UserAgent :=
'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01';
s := HTTP.Response.RawHeaders.text;// showmessage(s) и если что смотрим длинну своей сеткуки глазками=) я так делал)))
if Pos('Set-Cookie', s) <> 0 then
begin
a:= copy(s, Pos('Set-Cookie', s), 60); //Здесь 60 это длинна строки с моими куками
s:='';
s:=copy(a, Pos(' ', a)+1, 42); //Копируем только значение
s := 'Cookie: '+s;
end;
HTTP.Request.CustomHeaders.text := s;//вот мы и посылаем куки вида "Cookie: 123456ваывы8798пав"=)
if http.ResponseCode = 302 then //если редирект, то сами редиректим...
s := http.Get('http://site.domain' + http.Response.Location);ах, да... Код:
var'ы: s, a; strings; http: TIdHTTP; lmikle: пользуемся тегами!!! Последний раз редактировалось lmikle, 24.10.2011 в 00:58. |