curl 上传文件C代码
时间: 2024-07-18 07:01:38 浏览: 94
在C语言中,使用`curl`库上传文件通常需要创建一个HTTP POST请求,并附带文件数据。下面是一个简单的示例,展示如何使用`libcurl`上传文件:
```c
#include <curl/curl.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
return fwrite(ptr, size, nmemb, stream);
}
int main() {
CURL *curl;
CURLcode res;
FILE *file = fopen("path_to_your_file", "rb"); // 替换为你要上传的文件路径
if (file == NULL) {
fprintf(stderr, "Failed to open file.\n");
exit(1);
}
curl_global_init(CURL_GLOBAL_DEFAULT); // 初始化curl
curl = curl_easy_init(); // 创建一个cURL会话
if (!curl) {
fprintf(stderr, "curl_easy_init() failed\n");
fclose(file);
curl_global_cleanup();
return -1;
}
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
// 创建一个POST表单,包括文件部分
formpost = curl_formadd(&formpost, &lastptr,
CFORM_COPYNAME, "file",
CFORM_FILE, "path_to_your_file", // 替换为文件名
CFORM_END);
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/upload"); // 要上传到的服务器地址
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); // 设置POST数据
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // 指定处理上传数据的方式
curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout); // 将响应输出到控制台
res = curl_easy_perform(curl); // 执行请求
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_formfree(formpost); // 清理POST表单
fclose(file);
curl_easy_cleanup(curl); // 关闭cURL会话
curl_global_cleanup(); // 清理全局资源
return res == CURLE_OK ? 0 : 1; // 如果成功返回0,失败则返回错误码
}
```
请注意,这个例子假设服务器支持通过HTTP POST上传文件。你需要将`"http://example.com/upload"`替换为你实际的目标URL。此外,`"path_to_your_file"`也要替换为你要上传的实际文件路径。
阅读全文