在curl_easy_perform之后接收数据

时间:2010-12-27 13:50:02

标签: c++ c linux libcurl

我有以下问题:如何在char *缓冲区中使用http-response写回数据?我找到了几种方法:

  1. 使用CURLOPT_WRITEDATACURLOPT_WRITEFUNCTION。但是CURLOPT_WRITEDATA需要文件指针(FILE *)。使用带有回调函数的CURLOPT_WRITEFUNCTION在我看来是怪癖......
  2. 使用curl_easy_sendcurl_easy_recv。但在这种情况下,我需要用手写所有POST标题......
  3. 还有其他一些更优雅的方法吗?例如将char *缓冲区指针传递给某个函数以获取http响应。

1 个答案:

答案 0 :(得分:2)

实际上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;
}