![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
Вопрос такой: нужно залогиниться с помощью delphi (idHTTP) на сервер (php) и загрузить ряд страниц.
Сервер: http://vkontakte.ru Делаю так:
После запроса Post выдает HTTP/1.1 302 Found и предлагает перейти на страницу profile.php . Вроде так и должно быть. Но когда пытаюсь получить страницу, пишет: Чтобы просматривать эту страницу, нужно зайти на сайт . CookieManager прикрутил стандартным способом, через компоненты. Нашел на форуме тему с подобной проблемой: http://forum.vingrad.ru/topic-81091.html Там проблемы разрешились. Вроде делаю все так же, но проблемы остаются. Спасибо. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Включи HandleRedirects - он сам перейдёт, куда нужно.
Также посмотри сниффером или маппером, что шлёт браузер, а что ты. |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
Посмотрел маппером. Кажется у меня что-то странное творится с Cookie.
В ответ на запрос POST, как и ожидалось, приходит ответ с Cookie. Однако в следующем запросе GET Indy никаких Cookie не вставляет (в отличие от браузера). Может я как-то неправильно подключил/настроил CookieManager ? |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
А ты прописал его в IdHTTP? -------------------- ![]() |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
aktuba
Я кинул на форму компонент IdCookieManager, добавил его через инспектор в свойстве CookieManager у компонента IdHTTP и выставил AllowCookies в true. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
chekist, в IdHttp менеджер куков нужно указать.
Свойство CookieManager IdHTTP - выбери его. Иначе он просто валяться будет, но никак не работать... |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
Snowy
Чего-то я не совсем понял. А я что по-твоему сделал? |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
chekist, выложи проект тестовый - посмотрим. Так трудно сказать.
-------------------- ![]() |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
O.K. Вот проект. Я надеюсь те, кто будет мне помогать, зарегистрированы в контакте, чтобы его потестировать. Это сообщение отредактировал(а) chekist - 19.6.2007, 20:56 Присоединённый файл ( Кол-во скачиваний: 178 ) ![]() |
|||
|
||||
aktuba |
|
||||||||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
chekist, за такую задачку я бы тебе поставил плюс, но думаю рановато для тебя =)
Итак. Задачка действительно оказалась интересной и, не скрою, я ее не до конца еще решил... Надо будет покопаться поглубже, для того чтобы найти красивое решение. Но если в кратце, то проблема в следующем. Вот так выглядит установка куков для этого сайта:
Вся проблема кроется в том, что в куках прописано на какой домен ставить эту куку: path=/; domain=.vkontakte.ru Браузеры такое глотают легко, просто отбрасывая точку впереди, а вот Indy на этом валиться по следующей причине:
Тут видно, что именно для .vkontakte.ru будут ставиться куки, а не для vkontakte.ru. Если покопаться дальше, то можно найти вот такие сравнения:
Как не трудно понять - эти сравнения всегда будут давать False, если домен, для которого устанавливается кука, впереди содержит точку. Вот и вся проблема =)))) Решение, на данный момент, простое. В модуль IdCookieManager, в процедуру DoAdd надо добавить одну строку:
Теперь эта процедура будет выглядеть так:
После этого все работает нормально. Но повторяю - это половинчатое решение... Это сообщение отредактировал(а) aktuba - 20.6.2007, 03:54 -------------------- ![]() |
||||||||||
|
|||||||||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
Круто! А существует способ работы с Cookies без CookieManager ?
Как-нибудь их вручную вытаскивать из Responce и вставлять в Request через свойства IdHTTP. Это сообщение отредактировал(а) chekist - 20.6.2007, 13:58 |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
Ты не понял - они даже в Response не попадают... С куками можно работать через WinInet, но это уже не так просто, как с Indy. -------------------- ![]() |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
В ообщем, спасибо aktuba за помощь и потраченное на нее время.
Проект дальше будет писаться на Builder'e. Там есть один замечательный компонент - Fast Net NMHTTP. В нем с куками тоже не все в порядке, но по крайней мере есть прямой доступ к Header и Cookie, и если что, нужные данные можно распарсить. Также благодарю Snowy за его маппер. Удачи! Это сообщение отредактировал(а) chekist - 20.6.2007, 20:50 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
chekist, в TIdHttp тоже можно к хедерам обращаться.
А FastNet уже устарел и больше не поддерживается. В новых версиях билдера его уже нет. Так что возникнут проблемы с переходом на новую версию билдера. Видать старый билдер у тебя. 6-й небось. В 6-й дельфи эти компоненты тоже были... |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
=)))) А чем тебе уже готовое решение не угодило? -------------------- ![]() |
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
Всем угодило. Переход на Builder связан с тем, что те, кто будет со мной работать, не знают Delphi.
|
|||
|
||||
chekist |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 19.6.2007 Репутация: нет Всего: 2 |
||||
|
||||
DDDsa |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
Странно, в D2009 модуль IdCookieManager переписан, а эта проблема не исправлена. Чинится этим же способом |
||||||||||||
|
|||||||||||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
А как переписать процедуру TIdCookieManager?
Где этот код?) |
|||
|
||||
KaKTyCc |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 2.8.2005 Репутация: нет Всего: 1 |
Тоже не понятно, как внести изменения в процедуру, чтобы куки сохранялись
Добавлено через 10 минут и 9 секунд У меня сейчас так выглядит эта процедура
--------------------
Мой блог |
|||
|
||||
MetalFan |
|
||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
у меня (Indy 10.2.3) DoAdd выглядит так:
Предлагаю в строке 7 сделать замену на сл.:
по идее должно работать, но проверить не на чем) -------------------- There are always someone smarter than you... |
||||
|
|||||
KaKTyCc |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 2.8.2005 Репутация: нет Всего: 1 |
Трассирую и обнаружил что в процедуре
Заходит в Disconnect Добавлено через 11 минут и 37 секунд Не помогает ничего После такой штуки
получаю
--------------------
Мой блог |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
KaKTyCc, и что из этого? может это нормальное поведение
-------------------- There are always someone smarter than you... |
|||
|
||||
KaKTyCc |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 2.8.2005 Репутация: нет Всего: 1 |
Ок, может быть.
Тогда вопрос, если я авторизовался на сервере, сделал POST и т.д. тогда GET должен вернуть страницу на которой я авторизован? и соответственно я могу там заполнить еще одну форму и отправить? я правильно все понимаю? --------------------
Мой блог |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
все зависит от правильной обработки куков
-------------------- There are always someone smarter than you... |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Я не совсем поняла как найти этот файл, который нужно править, что бы точка в начале домена кук не влияла
|
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 3 Всего: 50 |
IdHTTP1.Post разве не возвращает результат?
-------------------- |
|||
|
||||
Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: нет Всего: 4 |
S:=IdHTTP1.Response.RawHeaders.CommaText - для получения всего ответа от сервера (вместе с кукисами)
--------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
creas0ft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 5.8.2006 Где: Саранск Репутация: 2 Всего: 2 |
Апну старый топик, как в нынешнем свежем кукименджере сменить чтобы точки понимал. ((
--------------------
Форум программистов уклонистов в сторону сео-шмео |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |