Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логин по IdHTTP на php сервер 
V
    Опции темы
chekist
Дата 20.6.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 19.6.2007

Репутация: нет
Всего: 2



Всем угодило. Переход на Builder связан с тем, что те, кто будет со мной работать, не знают Delphi.  
PM MAIL   Вверх
chekist
Дата 6.10.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 19.6.2007

Репутация: нет
Всего: 2



Проект на C++ Builder

Присоединённый файл ( Кол-во скачиваний: 72 )
Присоединённый файл  vkontakte_login.rar 434,75 Kb
PM MAIL   Вверх
DDDsa
Дата 4.3.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



Цитата(aktuba @ 20.6.2007,  03:53)
chekist, за такую задачку я бы тебе поставил плюс, но думаю рановато для тебя =)

Итак. Задачка действительно оказалась интересной и, не скрою, я ее не до конца еще решил... Надо будет покопаться поглубже, для того чтобы найти красивое решение. Но если в кратце, то проблема в следующем. Вот так выглядит установка куков для этого сайта:
Код

Set-Cookie: remixchk=2; expires=Thu, 19-Jun-2008 00:55:33 GMT; path=/; domain=.vkontakte.ru
Set-Cookie: remixmid=23452; expires=Thu, 19-Jun-2008 00:55:33 GMT; path=/; domain=.vkontakte.ru
Set-Cookie: remixemail=aktuba%40yandex.ru; expires=Thu, 19-Jun-2008 00:55:33 GMT; path=/; domain=.vkontakte.ru
Set-Cookie: remixpass=52120febf525e8abeb9c95e9dce2c930; expires=Thu, 19-Jun-2008 00:55:33 GMT; path=/; domain=.vkontakte.ru


Вся проблема кроется в том, что в куках прописано на какой домен ставить эту куку: path=/; domain=.vkontakte.ru
Браузеры такое глотают легко, просто отбрасывая точку впереди, а вот Indy на этом валиться по следующей причине:

Код

  ACookie.CookieText := ACookieText;

  if Length(ACookie.Domain) = 0 then LDomain := AHost
  else LDomain := ACookie.Domain;

  ACookie.Domain := LDomain;

  if ACookie.IsValidCookie(AHost) then
  begin
    if DoOnNewCookie(ACookie) then
    begin
      FCookieCollection.AddCookie(ACookie);
    end
    else begin
      ACookie.Collection := nil;
      ACookie.Free;
    end;
  end
  else begin
    ACookie.Free;
  end;


Тут видно, что именно для .vkontakte.ru будут ставиться куки, а не для vkontakte.ru. Если покопаться дальше, то можно найти вот такие сравнения:
Код

Result := ((IndyPos('.', S) = 0) or (S[1] <> '.')) and NOT IsValidIP(S);


Как не трудно понять - эти сравнения всегда будут давать False, если домен, для которого устанавливается кука, впереди содержит точку. Вот и вся проблема =)))) Решение, на данный момент, простое. В модуль IdCookieManager, в процедуру DoAdd надо добавить одну строку:
Код

if LDomain[1] = '.' then LDomain := Copy(LDomain, 2, Length(LDomain) - 1);


Теперь эта процедура будет выглядеть так:
Код

procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String);
Var
  LDomain: String;
begin
  ACookie.CookieText := ACookieText;

  if Length(ACookie.Domain) = 0 then LDomain := AHost
  else LDomain := ACookie.Domain;

  if LDomain[1] = '.' then LDomain := Copy(LDomain, 2, Length(LDomain) - 1);
  ACookie.Domain := LDomain;

  if ACookie.IsValidCookie(AHost) then
  begin
    if DoOnNewCookie(ACookie) then
    begin
      FCookieCollection.AddCookie(ACookie);
    end
    else begin
      ACookie.Collection := nil;
      ACookie.Free;
    end;
  end
  else begin
    ACookie.Free;
  end;
end;


После этого все работает нормально. Но повторяю - это половинчатое решение...

Странно, в D2009 модуль IdCookieManager переписан, а эта проблема не исправлена. Чинится этим же способом
PM MAIL ICQ   Вверх
Валерия
Дата 17.5.2009, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



А как переписать процедуру  TIdCookieManager?
Где этот код?)
PM MAIL   Вверх
KaKTyCc
Дата 23.5.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: нет
Всего: 1



Тоже не понятно, как внести изменения в процедуру, чтобы куки сохранялись

Добавлено через 10 минут и 9 секунд
У меня сейчас так выглядит эта процедура

Код

procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String);
begin
  ACookie.CookieText := ACookieText;

  if Length(ACookie.Domain) = 0 then begin
    ACookie.Domain := AHost;
  end;

  if not IsRejectedCookie(ACookie, AHost) then
  begin
    if DoOnNewCookie(ACookie) then
    begin
      FCookieCollection.AddCookie(ACookie);
      Exit;
    end;
    ACookie.Collection := nil;
  end;

  ACookie.Free;
end;

--------------------
Мой блог
PM MAIL WWW   Вверх
MetalFan
Дата 23.5.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



у меня (Indy 10.2.3) DoAdd выглядит так:
Код

procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String);
Var
  LDomain: String;
begin
  ACookie.CookieText := ACookieText;

  if Length(ACookie.Domain) = 0 then LDomain := AHost
  else LDomain := ACookie.Domain;

  ACookie.Domain := LDomain;

  if ACookie.IsValidCookie(AHost) then
  begin
    if DoOnNewCookie(ACookie) then
    begin
      FCookieCollection.AddCookie(ACookie);
    end
    else begin
      ACookie.Collection := nil;
      ACookie.Free;
    end;
  end
  else begin
    ACookie.Free;
  end;
end;

Предлагаю в строке 7 сделать замену на сл.:
Код

  if Length(ACookie.Domain) = 0 then LDomain := DomainName(AHost)

по идее должно работать, но проверить не на чем)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
KaKTyCc
Дата 23.5.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: нет
Всего: 1



Трассирую и обнаружил что в процедуре
Код


unit IdHTTP;

procedure TIdCustomHTTP.DoRequest(const AMethod: TIdHTTPMethod;
  AURL: string; ASource, AResponseContent: TStream;
  AIgnoreReplies: array of SmallInt);

...

    if not Response.KeepAlive then begin
      Disconnect;
    end;




Заходит в Disconnect

Добавлено через 11 минут и 37 секунд
Не помогает ничего

После такой штуки

Код

try
     IdHTTP1.Post('http://romzolik.ucoz.ru/index/sub/', params, response);
     Memo2.Lines.Add(idHttp1.ResponseText);
     Memo2.Lines.Add(IdHTTP1.Response.Location);
     Memo1.Clear;
     Memo1.Lines.Add(idhttp1.Get(IdHTTP1.Response.Location));
   finally
      params.Free;
      response.Free;
   end;


получаю 


Код

HTTP/1.1 403 Forbidden
Server: uServ/1.1.0
Date: Sat, 23 May 2009 12:56:40 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15



--------------------
Мой блог
PM MAIL WWW   Вверх
MetalFan
Дата 23.5.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



KaKTyCc, и что из этого? может это нормальное поведение


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
KaKTyCc
Дата 23.5.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: нет
Всего: 1



Ок, может быть.
Тогда вопрос, если я авторизовался на сервере,
сделал POST и т.д. 
тогда GET должен вернуть страницу на которой я авторизован? и соответственно я могу там заполнить еще одну форму и отправить?

я правильно все понимаю?


--------------------
Мой блог
PM MAIL WWW   Вверх
MetalFan
Дата 23.5.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



все зависит от правильной обработки куков


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Валерия
Дата 25.5.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Я не совсем поняла как найти этот файл, который нужно править, что бы точка в начале домена кук не влияла
PM MAIL   Вверх
Демо
Дата 25.5.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



IdHTTP1.Post разве не возвращает результат?


--------------------
    
PM MAIL ICQ Skype   Вверх
Antimol
Дата 27.6.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: нет
Всего: 4



S:=IdHTTP1.Response.RawHeaders.CommaText - для получения всего ответа от сервера (вместе с кукисами)
--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
creas0ft
Дата 28.5.2010, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 5.8.2006
Где: Саранск

Репутация: 2
Всего: 2



Апну старый топик, как в нынешнем свежем кукименджере сменить чтобы точки понимал. ((
--------------------
Форум программистов уклонистов в сторону сео-шмео
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.