как получить заголовки и тело HTTP-ответа после запроса POST, используя curl - PullRequest
1 голос
/ 28 марта 2012
static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userp)
    {
        int totalSize = size*nmemb;
        if(totalSize > 1)
        {
            strncpy((char*)userp,(char*)ptr,totalSize);
        }
        return totalSize;
    }

curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &this->responseData);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION ,write_callback);

как получить ответ заголовка и тело в функции write_callback?

Мне нужно напечатать как эта форма.

заголовок ответа: 200 тело: ошибка слишком большая.

1 Ответ

3 голосов
/ 28 марта 2012

Вы можете получить заголовок ответа, если используете curl_easy_setopt(curl, CURLOPT_HEADER, 1).

Но write_callback можно вызывать много раз

Просто попробуйте это.

curl_test.c

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

size_t write_func(void *ptr, size_t size, size_t nmemb, void *userdata)
{
        //write(STDOUT_FILENO, ptr, size*nmemb); 
        printf("write_func\n");
        return size * nmemb;
}

int main(int argv, char *argc[])
{
        CURL *curl;
        if (argv != 2) {
                return 0;
        }
        curl = curl_easy_init();
        if (!curl) {
                fprintf(stderr, "curl_easy_init error");
        }
        curl_easy_setopt(curl, CURLOPT_URL, argc[1]);
        curl_easy_setopt(curl, CURLOPT_HEADER, 1);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_func);
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        return 0;
}

CMD:

gcc curl_test.c -o curl_test -lcurl && ./curl_test www.google.com
...