使用libcurl,用C语言编写一个http和https客户端,请求头能够自定义,实现向服务器发送请求并接收响应
时间: 2024-04-04 14:29:37 浏览: 157
Linux下用c语言实现发送http请求
4星 · 用户满意度95%
好的,以下是一个使用libcurl发送HTTP和HTTPS请求并接收响应的示例代码,可以自定义请求头:
```c
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
// 回调函数,处理接收到的响应
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
size_t realsize = size * nmemb;
char *response = (char *) userdata;
// 将响应拼接到userdata中
strncat(response, ptr, realsize);
return realsize;
}
int main(void)
{
CURL *curl;
CURLcode res;
struct curl_slist *headers = NULL;
char response[4096] = ""; // 用于存储响应数据
curl = curl_easy_init();
if(curl) {
// 设置请求头
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer TOKEN");
// 设置请求地址
curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/api");
// 设置请求头
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 设置响应回调函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
// 设置响应数据存储位置
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
// 执行请求
res = curl_easy_perform(curl);
// 检查错误
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
else
printf("Response:\n%s\n", response);
// 释放请求头内存
curl_slist_free_all(headers);
// 清理curl句柄
curl_easy_cleanup(curl);
}
return 0;
}
```
这个示例代码中,我们使用了一个名为`write_callback`的回调函数,当curl接收到响应时,会调用这个函数。在`write_callback`函数中,我们将接收到的响应数据拼接到`userdata`参数中,`userdata`参数是我们在`curl_easy_setopt`函数中设置的响应数据存储位置。
在`main`函数中,我们首先创建了一个`curl_slist`类型的变量`headers`,用于存储请求头信息。然后使用`curl_slist_append`函数添加了两个请求头信息,即Content-Type和Authorization,并将`headers`作为选项传递给了`curl_easy_setopt`函数。
使用`curl_easy_setopt`函数设置了请求地址、请求头、响应回调函数和响应数据存储位置,然后使用`curl_easy_perform`函数执行请求。如果执行成功,我们将打印出接收到的响应数据。
执行完请求后,我们使用`curl_slist_free_all`函数释放了请求头内存,并使用`curl_easy_cleanup`函数清理了curl句柄。
你可以根据自己的需求修改请求头信息,并根据响应数据的格式修改回调函数中的处理方式。此外,你还可以使用`curl_easy_setopt`函数设置其他选项,如请求方式、请求体等。有关更多信息,请参阅libcurl文档。
阅读全文