2014-09-13 4 views
0

Я пытаюсь войти на сайт, используя libcurl в c (http-сайт, а не https). Проблема в том, что после входа в систему, если я попытаюсь добраться до страницы в домене, я перенаправляюсь на страницу, требуя, чтобы мой сеанс истек, и мне нужно перезагрузить.сеанс устранения неполадок истек с использованием libcurl

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

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt"); 
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1); 

Затем я использовал CURLOPT_VERBOSE для получения информации о сеансе. Кажется, я действительно получаю cookie и отправляю его снова в последующих запросах.

Set-Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec; path=/ 

это печенье также используется в следующих запросах, как это:

Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec 

, наконец, когда я иду в cookie.txt я также вижу, печенье там:

domain FALSE / FALSE 0 PHPSESSID 2d952576829405ce0d25689804b525ec 

Так заключить мой вопрос: как я могу дополнительно устранить проблему с истекшим сеансом? Большинство источников в Интернете объясняют, как заставить cookie работать, но в этом случае я не вижу проблемы с файлом cookie.

EDIT: Используя общий метод, предоставленный Vasiliy Faronov, я обнаружил, что два дополнительных файла cookie обычно генерируются из ответа javascript. По-видимому, libcurl не интерпретирует javascript и поэтому не создает файлы cookie. После эмуляции значения файлов cookie все должно работать, поэтому я рассмотрю этот вопрос.

ответ

1

Если у вас есть веб-ресурс, который работает с веб-браузером, но не работает с программными запросами, общий ход действий прост.

  1. Позвольте себе подробно изучить запросы и ответы. В вашем случае вы, вероятно, можете использовать инструменты разработчика вашего веб-браузера и CURLOPT_VERBOSE. Во многих случаях работает сниффер пакетов.
  2. Успешное взаимодействие с веб-браузером и захват потока запросов/ответов.
  3. Запрограммировать один и тот же запрос/ответный поток. Если вы делаете запросы точно так же, воспроизводя все данные сообщения, насколько это практически возможно, вы обычно должны получать одинаковый успешный результат.
  4. Измените свою программу шаг за шагом. Удалите ненужные заголовки и файлы cookie один за другим, замените User-Agent и так далее. В какой-то момент взаимодействие сломается, и вы узнаете, например. что этот конкретный заголовок был значительным. Или это может не сломаться.
Смежные вопросы