![]() |
Модераторы: 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 |
=)))) А чем тебе уже готовое решение не угодило? -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |