libcurl获取所有响应内容
时间: 2023-08-03 18:08:47 浏览: 314
libcurl获取响应内容的方式有两种:一种是使用回调函数,另一种是将响应内容保存到内存中,下面分别介绍这两种方式:
1. 使用回调函数获取响应内容
在使用libcurl进行HTTP请求时,可以通过设置CURLOPT_WRITEFUNCTION选项来设置一个回调函数,该回调函数将在接收到响应数据时被调用,可以在该函数中对响应数据进行处理。下面是一个使用回调函数获取响应内容的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
// 回调函数,将响应数据输出到控制台
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
size_t total_size = size * nmemb;
printf("%.*s", total_size, ptr);
return total_size;
}
int main(void)
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
```
在以上代码中,write_callback()函数是回调函数,它的作用是将响应数据输出到控制台。在回调函数中,我们将接收到的响应数据输出到控制台,并返回已处理的数据大小。使用CURLOPT_WRITEFUNCTION选项和回调函数,我们可以在接收到响应数据时实时处理数据,但是需要注意,处理数据的操作必须要保证线程安全。
2. 将响应内容保存到内存中
除了使用回调函数处理响应数据外,还可以将响应数据保存到内存中,可以使用CURLOPT_WRITEDATA选项和CURLOPT_WRITEFUNCTION选项一起使用,将响应数据存储在一个内存缓冲区中。下面是一个将响应内容保存到内存中的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
// 回调函数,将响应数据保存到内存中
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
size_t total_size = size * nmemb;
char **response_ptr = (char **)userdata;
*response_ptr = realloc(*response_ptr, total_size + 1);
if(*response_ptr == NULL)
return 0;
memcpy(*response_ptr, ptr, total_size);
(*response_ptr)[total_size] = '\0';
return total_size;
}
int main(void)
{
CURL *curl;
CURLcode res;
char *response = NULL;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
printf("%s\n", response);
free(response);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
```
在以上代码中,我们通过设置CURLOPT_WRITEDATA选项将一个指向内存缓冲区的指针传递给回调函数write_callback(),在回调函数中,我们将接收到的响应数据保存到该缓冲区中。使用CURLOPT_WRITEFUNCTION选项和回调函数,我们可以在接收到响应数据时实时处理数据,但是需要注意,在使用内存缓冲区时,需要手动释放缓冲区的内存。
阅读全文