C++利用libcurl库实现文件和字段表单上传(POST方法)

最近在用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能不能用我也不太清楚

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值