c++ libcur form-data 上传文件
c++ libcur
#include <iostream>
#include <curl/curl.h>
size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) {
// 这里可以读取文件数据,但在这个例子中,我们不需要
return size * nmemb;
}
int main() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *data = "fieldname=value"; // 表单数据
const char *filename = "path/to/your/file"; // 文件路径
const char *url = "http://your.upload.server/endpoint"; // 上传URL
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
std::string result;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
CURLFORMcode formcode = CURL_FORMADD_OK;
// 添加文件到Form-Data
formcode = curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "file", // 表单字段名
CURLFORM_FILE, filename, // 文件路径
CURLFORM_END);
headerlist = curl_slist_append(headerlist, "Content-Type:multipart/form-data;charset=UTF-8");
if (formcode != CURL_FORMADD_OK) {
fprintf(stderr, "curl_formadd() failed: %s\n", curl_formadd_strerror(formcode));
}
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
// 设置Form-Data
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
// 执行上传
res = curl_easy_perform(curl);
// 清理Form-Data
curl_formfree(formpost);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
// 清理CURL
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
更多推荐
所有评论(0)