•  

ГлавнаяIndyЧастые вопросы по Indy → После захода методом Get на сайт в IdCookieManager должны быть Cookies, но их там нет

Создано: 17.05.2014 1:12:24 · Исправлено: 17.05.2014 1:12:24 · Прочтений: 672

Indy indy10.1.5_d7, IdHttp, IdCookieManager. После захода методом Get на сайт (судя по тому что отлавнивает снифер) в IdCookieManager должны быть Cookies, но их там нет. Причем заход на другой сайт привел к положительному результату (я смог прочесть кукиес).
var BotClient: TIdHTTP;
    BotCookie: TIdCookieManager;
    PostData: TIdMultiPartFormDataStream;
    i: integer;
begin
BotCookie:=TIdCookieManager.Create;
BotClient:=TIdHTTP.Create;
PostData := TIdMultiPartFormDataStream.Create;
try
  with BotClient do
  begin
  ProxyParams.ProxyServer:=196.68.8.80;
  ProxyParams.ProxyPort:=3128;

  CookieManager:=BotCookie;
  AllowCookies:=True;
  HandleRedirects:=True;
  end;

  mmLog.Lines.Add(BotClient.Get(http://depositfiles.com/));

  for i:=0 to BotCookie.CookieCollection.Count-1 do
  begin
  mmCookie.Lines.Add(BotCookie.CookieCollection.Items[i].CookieName
  + = +BotCookie.CookieCollection.Items[i].Value)
  end;

//Пусто:(

  finally
  PostData.Free;
  BotClient.Free;
  BotCookie.Free;
  end;
end;
Подскажите добрые рыцари может необходимо для некоторых сайтов проводить еще какую-нибудь дополнительную инициализацию IdCookieManager?
Отвечаю себе сам: Проблема была зарыта вот в этой функции ACookie.IsValidCookie(AHost), которая внутри IdHTTP проверяет принадлежит ли этот куки сайту куда послали запрос. Трабл у меня оказался в том, что я в запросе писал Get(http://Microsoft.com,st), а внутри этой фунции есть еще одна злая функция, которая result := FDomain = DomainName(AServerHost); Вот этот самый DomainName(AServerHost) из Microsoft.com делал .com, то есть отбрасывал верхний домен и поэтому .Microsoft.com не равен .com и все куки выбрасывались нафиг. Поэтому нужно писать в запросах Get(http://WWW.Microsoft.com,st), тогда после проверки имя домена в куки будет равняться имени домена в запросе! Так сам себе в одном из вопросов королевства ответил один смышленный человек:) Хотя я честно говоря и не мог предположить что решение проблемы может быть таким:)