curl post表单上传文件(C++)
最近测试如何上传文件到服务器。原来传照片一致通过binary 形式传文件,或者把图片base64编码传图片。一致没有用form-data 表单形式发送数据,今天尝试下如何使用libcurl提供的API上传文件。
Sample code:
#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://172.28.28.17:80/files/deviceupload", 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()); //指定urlcurl_formadd(&post, &last, CURLFORM_PTRNAME, "path", CURLFORM_PTRCONTENTS, "device_cover", CURLFORM_END);//form-data key(path) 和 value(device_cover)curl_formadd(&post, &last, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "./test.jpg",CURLFORM_FILENAME, "hello.jpg", CURLFORM_END);// form-data key(file) "./test.jpg"为文件路径 "hello.jpg" 为文件上传时文件名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;}
}
编译:
g++ -O2 -Wall -Wno-write-strings -D_LINUX -L../libcurl/lib -I../libcurl/include -std=c++11 ./test_main.cpp -L../libcurl/lib -lcurl -lssl -lcrypto -ldl -pthread -o sample_X86_64
如果文件路径不对 会不执行请求。
curl post表单上传文件(C++)相关推荐
- PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码
PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码 /*** curl 上传文件* @param $url* @param $filePath* @param stri ...
- 七牛云上传文件之表单上传文件
本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...
- php无表单上传文件,php – 如何使用没有实体类的表单上传文件
我试图使用没有实体类的表单上传文件.到目前为止没有运气. // Controller public function uploadAction() { $request = $this->get ...
- php文件上传并保存路径到数据库,thinkphp表单上传文件并将文件路径保存到数据库中?...
上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` ( `id` int(11) ...
- android multipartentity 怎么上传参数,android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b...
android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b 短版本-.jar已弃用,其升级版本java.lang.NoClassDefFoundError在 ...
- form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?
今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈.现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧. 我们分以下3种情况来谈这个 ...
- php处理表单上传文件
使用表单上传文件的时候,表单的提交方式必须是post提交方式,上传文件的input控件type属性值应为file,最重要的是form标签需要加一个enctype="multipart/for ...
- QT模拟表单上传文件到微信服务器
最近做微信开发,需要上传素材到微信服务器,我就用qt写了一个界面上传素材,首先我们来看下最终的界面: 然后将里面的access_token后面的lineEdit命名为:accessMediaEdit, ...
- serverlet 原理_serverlet实现表单上传文件原理
("/home/jh/upload/request.txt"); PrintWriter fileout = new PrintWriter(new FileWriter(f)); ...
最新文章
- 【jQuery】jQuery知识点梳理(持续更新)
- 你一定需要知道的高阶JAVA枚举特性!
- Java 运行时的内存划分
- android点击弹出日期选择器,关于Android 点击按钮弹出日期选择器
- HFSS中的求解类型(Solution Type)
- CentOS 7 防止端口自动关闭
- 来自未来,2022 年的前端人都在做什么?
- mysql挂载数据卷_记一次生产数据库数据文件进行分区转移
- linux新手常用命令
- 2016年中国国际信息通信展览会在北京开幕
- datatable中使用linq的条件或_C# 10. LINQ 的三种查询语句写法
- 1008 数组元素右移k位
- 【原生JS】web原生文字轮播效果
- android toast防重_安卓Toast自定义及防止重复显示
- Clickhouse(20.4.2.9) SSB性能测试
- 利用油猴脚本显示扇贝网真实打卡日记
- 用r语言画时序图和自相关图,并检验纯随机性
- python股票回测源码_Python爬虫回测股票的实例讲解
- 苹果手机通讯录删除了怎么恢复
- HTML简单入门 代码加注释详解
热门文章
- OpenCV 图像缩放:cv.resize() 函数详解
- Typora的可代替方案
- 我讨厌这个绿油油的头像!我用opencv换一下背景
- Android面试笔记之事件分发机制
- 中国联通再现用户净流失,在运营商市场进一步边缘化
- 百度java热力图_百度地图 之 热力图
- 成都小程序开发公司:智慧农业共享农场菜园,走地鸡认养小程序APP源码开发的案例介绍
- matlab功率放大仿真,基于Simulink的音响放大器仿真研究.doc
- 国防科技大学903计算机专业综合,2021年国防科技大学电子信息(085400)考研专业目录_硕士研究生考试范围 - 学途吧...
- python为什么有这么多库_为什么C++没有Python那么多开源库?