最近在用libcurl实现文件和字段上传至Django服务器
#include <iostream>
#include <curl/curl.h>
#include <string.h>
using namespace std;
//回调函数 得到响应内容
int write_data(void* buffer, int size, int nmemb, void* userp) {
std::string* str = dynamic_cast<std::string*>((std::string*)userp);
str->append((char*)buffer, size * nmemb);
return nmemb;
}
int upload(string url, string& body, string* response);
int main(int argc, char** argv) {
std::string body;
std::string response;
int status_code = upload("http://127.0.0.1:8000/subjects/", body, &response);//示例采用本地服务器
if (status_code != CURLcode::CURLE_OK) {
return -1;
}
cout << body << endl;
cout << response << endl;
return 0;
}
int upload(string url, string& body, string* response)
{
CURL* curl;
CURLcode ret;
curl = curl_easy_init();
struct curl_httppost* post = NULL;
struct curl_httppost* last = NULL;
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, (char*)url.c_str()); //指定url
curl_formadd(&post, &last, CURLFORM_PTRNAME, "name", CURLFORM_PTRCONTENTS, "ggggggg", CURLFORM_END);//form-data key(path) 和 value(device_cover)
curl_formadd(&post, &last, CURLFORM_PTRNAME, "sex", CURLFORM_PTRCONTENTS, "1", CURLFORM_END);//form-data key(path) 和 value(device_cover)
curl_formadd(&post, &last, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "1.pdf", CURLFORM_FILENAME, "1.pdf", CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post); //构造post参数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); //绑定相应
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)response); //绑定响应内容的地址
ret = curl_easy_perform(curl); //执行请求
if (ret == 0) {
curl_easy_cleanup(curl);
return 0;
}
else {
return ret;
}
}
else {
return -1;
}
}
利用libcurl实现文件和字段的表单上传
代码可以直接复用,地址改成服务器地址
curl_formadd(&post, &last, CURLFORM_PTRNAME, “name”, CURLFORM_PTRCONTENTS, “ggggggg”, CURLFORM_END); 实现提交字段表单,可以根据服务器字段进行修改
curl_formadd(&post, &last, CURLFORM_PTRNAME, “file”, CURLFORM_FILE, “1.pdf”, CURLFORM_FILENAME, “1.pdf”, CURLFORM_END); 实现文件上传,第二个字段是文件路径,第三个字段是上传后的文件名称
其他代码没有什么需要改动的
利用libcurl前面需要很多步骤,可以参考https://blog.csdn.net/david412306524/article/details/51213104 尽量一步都不要错,所有步骤都是为了生成libcurl.lib这个库
至于从网上下载的libcurl.lib能不能用我也不太清楚