Как (т.е. что инструмент использовать) для контролирования заголовков, отправленных Завихрением (Проблема Cookie)

Я использую Завихрение (libcurl) в приложении C++ и не могу отправить cookie (я думаю).

У меня есть Скрипач, TamperData и установленные Заголовки LiveHTTP, но они только полезны для просмотра трафика браузера и (это казалось бы), неспособный из контроля общего сетевого трафика на машине, поэтому когда я выполняю свою машину, я не вижу, что информация заголовка отправляется. Однако, когда я просматриваю страницу в браузере, когда успешно зарегистрированный, я вижу, что информация о куки отправляется.

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

Мой код C++ смотрит хорошо, таким образом, я не знаю то, что идет не так, как надо - это - то, почему я должен:

  1. Сначала смогите просмотреть мой сетевой трафик машин (не только трафик браузера) - который (свободный) инструмент?

  2. Принятие я использую Завихрение неправильно, что случилось с моим кодом? (cookie получаются и хранятся хорошо, кажется, что они просто не отправляются с запросами по некоторым причинам.

Вот раздел моего класса, который имеет дело со стороной cookie Запросов HTTP:

curl_easy_setopt(curl, CURLOPT_TIMEOUT, long(m_timeout));
curl_easy_setopt(curl, CURLOPT_USERAGENT,
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727)");
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);

Есть ли что-то не так с вышеупомянутым кодом?

1
задан Stick it to THE MAN 23 February 2010 в 12:45
поделиться

2 ответа

Вы можете использовать Wireshark (бывший Ethereal) для просмотра всего сетевого трафика, который машина отправляет и получает.

2
ответ дан 3 September 2019 в 01:10
поделиться
  1. Как сказал Шон Карпентер, Wireshark - правильный инструмент для просмотра сетевого трафика. Запустите захват и используйте http в качестве фильтра, чтобы видеть только HTTP-трафик. Если вы просто хотите видеть HTTP-запросы / ответы, отправленные / полученные Curl, установите параметр CURL_VERBOSE и посмотрите stderr: curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L) .
  2. Я считаю, что вы правильно используете Curl. Скомпилируйте и запустите следующий (полный) пример; вы увидите, что при втором запуске (когда существует cookies.txt ) файлы cookie отправляются на сервер.

Пример кода:

#include <stdio.h>
#include <curl/curl.h>

int main()
{
    CURL *curl;
    CURLcode success;
    char errbuf[CURL_ERROR_SIZE];
    int m_timeout = 15;

    if ((curl = curl_easy_init()) == NULL) {
        perror("curl_easy_init");
        return 1;
    }

    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

    curl_easy_setopt(curl, CURLOPT_TIMEOUT, long(m_timeout));
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/");
    curl_easy_setopt(curl, CURLOPT_USERAGENT,
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727)");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt");
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);

    if ((success = curl_easy_perform(curl)) != 0) {
        fprintf(stderr, "%s: %s\n", "curl_easy_perform", errbuf);
        return 1;
    }

    curl_easy_cleanup(curl);
    return 0;
}
0
ответ дан 3 September 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: