c语言源码:http get/post 下载文件
时间: 2023-08-01 11:00:47 浏览: 241
在C语言中,可以使用一些库来执行HTTP的GET和POST请求,并下载文件。在这里,我们将使用libcurl库来完成这些操作。
首先,我们需要在代码中引入libcurl库的头文件。
```c
#include <stdio.h>
#include <curl/curl.h>
```
然后,我们可以定义一个回调函数,用于处理下载的数据。
```c
size_t write_callback(void* ptr, size_t size, size_t nmemb, FILE* stream) {
return fwrite(ptr, size, nmemb, stream);
}
```
接下来,我们可以编写一个函数来执行HTTP的GET请求,并将返回的数据保存到文件中。
```c
void http_get(const char* url, const char* file_path) {
FILE* file = fopen(file_path, "wb");
if (file == NULL) {
printf("无法打开文件!\n");
return;
}
CURL* curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("请求失败:%s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
fclose(file);
}
```
最后,我们可以编写一个函数来执行HTTP的POST请求,并将返回的数据保存到文件中。
```c
void http_post(const char* url, const char* post_data, const char* file_path) {
FILE* file = fopen(file_path, "wb");
if (file == NULL) {
printf("无法打开文件!\n");
return;
}
CURL* curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_data);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("请求失败:%s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
fclose(file);
}
```
通过使用以上两个函数,我们可以下载一个文件到指定的路径。例如,假设我们要下载一个名为"test.txt"的文件,可以使用以下代码:
```c
http_get("http://example.com/test.txt", "test.txt");
```
或者,如果我们需要通过POST请求下载文件,可以使用以下代码:
```c
const char* post_data = "param1=value1¶m2=value2";
http_post("http://example.com/download", post_data, "test.txt");
```
以上就是使用C语言执行HTTP的GET和POST请求,并下载文件的示例代码。
阅读全文