Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2012, 10:35   #1
Jetro
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 31
По умолчанию CookieManager не принимает cookie, и не дает добавить свои

Есть сайт, на котором я пытаюсь авторизоваться, и который дает следующие куки:
Код:
Set-Cookie: LOGIN=user
Set-Cookie: HASH=bla1bla2bla3;path=/
CookieManager эти куки воспринимать отказывается.
Пытался уже подсунуть их вручную, благо знаю какие данные должны находиться в обеих куках, но попытка не увенчалась успехом:
Код:
U:=TidURI.Create('http://site.com/');
IdCookieManager1.AddCookie('LOGIN=user1',U);
IdCookieManager1.AddCookie2('HASH=bla1bla2bla3',U);

Showmessage(InttoStr(idHttp1.CookieManager.CookieCollection.Count));
И мне выдает ноль.
Здесь я пытался использовать AddCookie и AddCookie2, какая разница между ними я не знаю, но не заработали оба.
Так-же пытался использовать конструкции вида:
IdCookieManager1.CookieCollection.I tems[0] :=
IdCookieManager1.CookieCollection.A ddCookie()
IdCookieManager1.AddCookies()

Но все ругались следующим образом:
Incompatible types: 'TIdCookieRFC2109' and 'string'.
Что за тип данных TIdCookieRFC2109 я не в курсе, и гугл в прояснении этого не помог.

Прошу подсказать как или заставить CookieManager'а принимать куки или как подсунуть свои.
Jetro вне форума Ответить с цитированием
Старый 21.08.2012, 10:52   #2
Jetro
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 31
По умолчанию

Только написал сообщение выше, и сразу-же наткнулся на конструкцию вида "IdCookieManager1.CookieCollection. AddSrcCookie()", и таким образом добавить куки все-же получилось, но вот при POST-запросе к сайту они не используються.
Чем дальше тем интереснее.
Jetro вне форума Ответить с цитированием
Старый 21.08.2012, 20:02   #3
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Есть еще такой вариант:
Код:
idhttp1.Request.CustomHeaders.Add('Cookie: HASH=bla1bla2bla3;path=/');
Voody вне форума Ответить с цитированием
Старый 22.08.2012, 14:19   #4
Jetro
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Voody Посмотреть сообщение
Есть еще такой вариант:
Код:
idhttp1.Request.CustomHeaders.Add('Cookie: HASH=bla1bla2bla3;path=/');
О, отличная идея! Вместо того чтобы пытаться подсунуть куки, просто взять и добавить нужные данные в хедер. Спасибо.

В общем, немного помедетировав на код, я родил такую процедуру:

Код:
procedure TForm1.PseudoCookies(Header : String);
var
Cook : String;
i, i1, i2 : Integer;
CookList : TStringList;
begin
  CookList := TStringList.create;
  while Pos('Set-Cookie', Header) <> 0 do
    begin
      i := Pos('Set-Cookie', Header);
      i1 := PosEx(': ', Header, i) + 2; 

      if PosEx(#10, Header, i) > PosEx(';', Header, i)
        then i2 := PosEx(';', Header, i)
        else i2 := PosEx(#10, Header, i) - 1;

      CookList.Add(Copy(Header, i1, i2-i1));
      Delete(Header, i, 12);
  end;

  for i := 0 to CookList.Count - 1 do Cook := Cook + CookList.Strings[i] + ';';

  idHTTP1.Request.CustomHeaders.Clear;
  idHTTP1.Request.CustomHeaders.Add('Cookie: ' + Cook);
end;
После чего, в тот момент, когда нам нужно получить печеньки, пишем в коде "PseudoCookies(IdHTTP1.Response.RawH eaders.text);", и все, куки у нас в кармане хедере.

Авторизация пройдена, но все-же вопрос "Почему куки менеджер не принимает куки сам" остается открытым.
Jetro вне форума Ответить с цитированием
Старый 22.08.2012, 15:17   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

небось у вас инди древний?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.08.2012, 18:20   #6
Jetro
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
небось у вас инди древний?
Версия 10.5.5, Delphi 2010.
Jetro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация ВК. Проблема с CookieManager igrok111 Общие вопросы Delphi 1 18.07.2012 16:56
добавить cookie пауэрлифтинг Общие вопросы Delphi 1 27.04.2010 01:28
как передать свои cookie сайту miki131 Работа с сетью в Delphi 10 01.12.2009 15:07
Инди не принимает куки schnaps Работа с сетью в Delphi 2 14.07.2009 16:18
Ребята помогите IdHTTP1.CookieManager !!! sandra33 Работа с сетью в Delphi 0 02.06.2009 14:10