Форма libcurl в с - PullRequest
       17

Форма libcurl в с

1 голос
/ 06 сентября 2011

Раньше я только коснулся libcurl, но теперь мне нужно зайти на страницу и войти в систему. Это означает, что я должен заполнить форму с именем пользователя, паролем

Я искал пример уже несколько дней, но ничего не работает, никакие объяснения не дают мне понять, что я должен делать.

В этом примере они отправляют форму, но что тогда? Как мне получить возвращенную информацию? http://curl.haxx.se/libcurl/c/http-post.html

По следующей ссылке я нашел кого-то, у кого была похожая проблема. Не знаю, решит ли он свои проблемы. Я украл CURLOPT_FOLLOWLOCATION-строку, но не смог добраться до обновленной страницы. (Я предполагаю, что получу информацию, которую получу, если сделаю это в браузере, но нет). На этой странице они также заговорили об использовании cookie-файлов для завитков. Я думал, что куки были использованы для запоминания имен пользователей для упрощения входа в систему. Как использовать libcurl для входа на защищенный веб-сайт и получить html за логином

Самая простая попытка, которую я мог придумать, состояла в том, чтобы просто перейти на эту страницу и отправить автомобиль = Автомобиль на странице ниже. Когда я делаю это в браузере, страница возвращает «Вход был получен как: vehicle = Car ", но я не получаю его в моей c / c ++ - программе, использующей curl. http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_checkbox

Ниже приведен фрагмент кода, который я использую:

CURL *curl;
CURLcode res;
curl = curl_easy_init();


if(curl) {
    printf("Open %s\n", name.c_str());

    curl_easy_setopt(curl, CURLOPT_URL, "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_checkbox");
    curl_easy_perform(curl);

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "vehicle=Car");
    curl_easy_setopt(curl, CURLOPT_URL, name.c_str());
    curl_easy_perform(curl);

    int i = 0;
    do{
        if (i)
        {
            curl_easy_cleanup(curl);
            curl_easy_setopt(curl, CURLOPT_URL, name.c_str());
        }
        printf("Try number %d \n", ++i);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &localStore);
        res = curl_easy_perform(curl);
    } while(res);

    curl_easy_cleanup(curl);

1 Ответ

0 голосов
/ 07 сентября 2011

Вы должны настроить функцию обратного вызова:

...
curl_res = curl_easy_setopt( handle, CURLOPT_WRITEDATA, ptr );
curl_res = curl_easy_setopt( handle, CURLOPT_WRITEFUNCTION, callback );
...

Когда вы входите в callback( ), входящие данные доступны на ptr.

Не забудьте вернуть realsize при выходе из callback( ).

...