Indy 10.5.8.0, D2007. Выполняю GET запрос. Но нужно передать куки серверу: op_bp=checked
Выполняю:
| Код | IdHTTP1 := TIdHTTP.Create(Application); IdHTTP1.Request.UserAgent := sUserAgent; IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; IdHTTP1.Request.AcceptLanguage := 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'; IdHTTP1.Request.AcceptCharSet := 'IBM866,utf-8;q=0.7,*;q=0.7'; IdHTTP1.Request.AcceptEncoding := 'gzip, deflate';
IdHTTP1.HandleRedirects := true; IdHTTP1.AllowCookies := TRUE;
IdCookieManager1 := TIdCookieManager.Create(IdHTTP1); IdHTTP1.CookieManager := IdCookieManager1;
IdCompressorZLib1 := TIdCompressorZLib.Create(IdHTTP1); IdHTTP1.Compressor := IdCompressorZLib1;
... ...
Var //cookie uri: TIdURI; strs: TStringList; begin ... ... idHTTP1.Get('http://www.egent.ru/'); uri := TIdURI.Create('www.egent.ru'); ... ...
IdCookieManager1.CookieCollection.AddClientCookies('op_bp=checked');
или
strs.Clear; strs.Add('op_bp=checked'); IdCookieManager1.CookieCollection.AddServerCookies(strs, uri);
ShowMessage(GetCookieList(IdCookieManager1));// вижу, что куки присутствую (GetCookieList см. ниже) sl.Text := HttpGetUrl(URL, idHTTP1);//sl - TStringList SaveSlToFile(sl.Text, 'd:\11.html');// сохраняю полученный контент в файл в файл.
|
В итоге вижу, что печенька (op_bp=checked) не влияет.
Вот ссылка: h__p://www.egent.ru/komnaty.html?sd=1&sn=0&r1=0&r2=0&r3=0&r4=0&opt1=1&opt2=0&opt3=0&price_ot=12000&price_do= Справа вверху розовым нужно поставить галочку "Не выводить объявления посредников". Без галочки сайт выводит 941 объявление, а с галочкой 680.
Так вот, после SaveSlToFile(sl.Text, 'd:\11.html'); проверяю файл, загружаю его в браузер и там показано, что найдено 941 объект, а должно быть 680. Что я ещё мог забыть? Почему в браузер отдается то, что нужно, а мне нет :(
| Код | functionGetCookieList(CookieManager: TIdCookieManager): string; var I: Integer; begin with TStringList.Create do try LineBreak := ';'; for I := 0 to CookieManager.CookieCollection.Count - 1 do Add(CookieManager.CookieCollection.Cookies[I].ClientCookie); Result := Text; finally Free; end; end;
function HttpGetUrl(url: string; idHttp: TIdHttp): string; var M: TStringStream; begin M := TStringStream.Create('');
try IdHTTP.Get(url, m);
//SaveSlToFile(m.DataString, 'd:\12.html');
if IdHTTP.ResponseCode = 502 then begin result := 'Ошибка 502. ' + url; freeandnil(m); exit; end;
except on e: exception do begin result := 'Ошибка *HttpGetUrl*. ' + url; if Assigned(m) then freeandnil(m); end; end;// try except
result := m.DataString; freeandnil(m); end;
|
Добавлено через 6 минут и 40 секунд Есть ли большая разница между uri := TIdURI.Create('www.egent.ru');
и c http:// uri := TIdURI.Create('http://www.egent.ru');
? |