我有以下问题:如何在char *
缓冲区中使用http-response写回数据?我找到了几种方法:
CURLOPT_WRITEDATA
或CURLOPT_WRITEFUNCTION
。但是CURLOPT_WRITEDATA
需要文件指针(FILE *
)。使用带有回调函数的CURLOPT_WRITEFUNCTION
在我看来是怪癖...... curl_easy_send
和curl_easy_recv
。但在这种情况下,我需要用手写所有POST
标题...... 还有其他一些更优雅的方法吗?例如将char *
缓冲区指针传递给某个函数以获取http响应。
答案 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;
}