Indy HTTP Client: сеансы как в веб-браузере - PullRequest
2 голосов
/ 01 сентября 2010

Я делаю программу для регистрации на сайте.
Для этого я использую C ++ Builder и Indy (TIdHTTP).

Как это работает:

  • Программа получает страницу регистрации через GET и извлекает с нее адрес изображения CAPTCHA;
  • загружает CAPTCHA (GET) и передает его пользователю;
  • отправляет данные, предоставленные пользователем, на веб-сайт вPOST запрос.

Проблема: код CAPTCHA всегда неверен.Это должно быть потому, что где-то между этими тремя вызовами на веб-сайт изменяется вызов CAPTCHA.

Чтобы предотвратить это, эти запросы должны быть как-то связаны
Так что я думаю, здесь нужна какая-то сессия поддержка здесь ...

Пожалуйста, скажите мнекак это можно сделать, в Delphi или C ++ Builder

РЕДАКТИРОВАТЬ:

Я обнаружил, что идентификатор сеанса хранится в cookie благодаря Runner

Ответы [ 4 ]

2 голосов
/ 02 сентября 2010

Если идентификатор сеанса PHP отправляется сервером в файле cookie, убедитесь, что вы используете последнюю версию Indy.Обработка файлов cookie в Indy 10 была прервана на некоторое время, но я недавно зарегистрировал новый код для управления файлами cookie в Indy для решения многих проблем.

Если идентификатор сеанса PHP отправляется сервером в скрытом полерегистрационную форму, то вам необходимо убедиться, что вы включили идентификатор в отправляемые вами данные POST.

2 голосов
/ 01 сентября 2010

Мне последовательность кажется правильной.Просто убедитесь, что при публикации ответа CAPTCHA вы предоставляете идентификатор, чтобы сказать, что это за капча.

Мне кажется, что ваш POST не распознается как конкретный запрос.Другими словами, вы, вероятно, не связываете ответ с конкретным пользователем.Когда вы впервые вызываете GET и получаете CAPTCHA обратно с сервера, сервер должен предоставить вам уникальный идентификатор для возвращенной CAPTCHA.Это может быть уникальный URL-адрес, файл cookie, поле, вставленное в возвращаемый HTML-код, и т. Д.

Это мое предположение из вашего описания.

РЕДАКТИРОВАТЬ:

Iесть больше информации.Это, очевидно, сервер PHP.Со страницы, предоставленной «BlaXpirit»:

Посетителю, обращающемуся к вашему веб-сайту, присваивается уникальный идентификатор, так называемый идентификатор сеанса.Он либо сохраняется в файле cookie на стороне пользователя, либо распространяется по URL.

Итак, если идентификатор указан в файле cookie, то, я думаю, вы не отправляете файл cookie обратно.Вы средний человек здесь, Это так.

  1. Вы делаете GET для сервера CAPTCHA.
  2. Вы получаете ответ, содержащий cookie
  3. Вы отправляете CAPTCHA обратно клиенту, но не отправляете cookie.

Вы должны отправитьфайл cookie для клиента и затем обратно на сервер CAPTCHA, или у вас есть собственное управление сеансом, сохраните файл cookie CAPTCHA, определите клиента при отправке ответа и отправьте файл cookie с ответом обратно на сервер CAPTCHA.

0 голосов
/ 02 сентября 2010

Позвольте мне угадать, хм ... Держу пари, вы регистрируете Yahoo :) В любом случае, с большинством популярных почтовых провайдеров это не так просто, есть некоторые javascript, которые защищают от автоматических регистраций.Эти сценарии могут генерировать файлы cookie или поля POST динамически.

0 голосов
/ 02 сентября 2010

Используйте IdCookieHandler и свяжите его с объектом IdHTTP.Тогда все функции управления cookie / сессиями будут автоматически выполнены Indy .

Это быстрое и чистое решение, если вы хотите работать с реальной поддержкой сессий и веб-автоматизацией, включая регистрацию.

...