curl post 文件 C代码
时间: 2024-07-18 08:01:38 浏览: 156
在C语言中,使用`curl`库发送POST请求并附带文件通常涉及到以下几个步骤:
```c
#include <stdio.h>
#include <curl/curl.h>
// 初始化CURL session
CURL *curl;
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
FILE *file = (FILE *)userdata;
return fwrite(ptr, size, nmemb, file);
}
int main() {
CURLcode res;
// 创建一个CURL会话
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api/upload");
// 上传文件的临时路径
FILE *file = fopen("path_to_your_file", "rb");
if (!file) {
fprintf(stderr, "Failed to open file\n");
goto done;
}
// 将文件设置为回调函数的数据
curl_easy_setopt(curl, CURLOPT_READFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
// 设置POST请求头
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: multipart/form-data; boundary=-----------------------------464878056916544");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 发送POST请求
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "--" BOUNDARY "\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"your_filename.txt\"\r\n"
"Content-Type: text/plain\r\n\r\n"
"<file_content_here>\r\n"
"--" BOUNDARY "--\r\n");
// 执行请求并捕获结果
res = curl_easy_perform(curl);
// 关闭资源和清理
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
fclose(file);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
done:
curl_global_cleanup();
return res == CURLE_OK ? 0 : 1;
}
```
在这个例子中,我们首先初始化CURL,然后设置目标URL,并创建一个文件指针准备读取待上传的文件内容。接着,我们将文件作为读取函数传递给CURL,设置HTTP头信息以及POST数据。最后,执行请求并处理结果。
注意,你需要替换上述代码中的URL、文件路径、文件名和内容。此外,这里的边界值(BOUNDARY)需要在实际使用时生成,因为它是一个随机字符串,用于区分每个部分的开始。
阅读全文