получение данных после curl_easy_perform - PullRequest
2 голосов
/ 27 декабря 2010

У меня следующий вопрос: как мне записать данные, возвращаемые с http-response, в буфер char *?Я нашел несколько подходов:

  1. использование CURLOPT_WRITEDATA или CURLOPT_WRITEFUNCTION.но CURLOPT_WRITEDATA требует указатель файла (FILE *).использование CURLOPT_WRITEFUNCTION с функцией обратного вызова мне кажется странным ...
  2. использование curl_easy_send и curl_easy_recv.но в этом случае мне нужно написать все POST заголовки руками ...

Есть ли другой, более элегантный подход?например, передать char * указатель буфера в какую-либо функцию для получения ответа http.

1 Ответ

2 голосов
/ 28 декабря 2010

На самом деле CURLOPT_WRITEDATA и CURLOPT_WRITEFUNCTION могут использоваться с любым типом указателя. Пока ваша функция совместима с указателем этого типа.

Например:

    ...
    client_t *client;
    CURL *conn;
    ...
    curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, read_data);
    curl_easy_setopt(conn, CURLOPT_WRITEDATA, client);
    ...

static size_t read_data(void *ptr,
                        size_t size,
                        size_t nmemb,
                        client_t *client)
{
     memcpy(client->data, ptr, size * nmemb);
     return size * nmemb;
}
...