C++用libcurl通过HTTP以表单的方式Post数据到服务器
POST字符串
#include <stdio.h> #include <curl/curl.h>int main(void) {CURL* curl = NULL;CURLcode res;curl = curl_easy_init();if(curl == NULL) {return CURLE_FAILED_INIT;}struct curl_slist* headerlist = NULL; // 设置表头,表头内容可能不同headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); // 设置URLcurl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");// 设置参数,比如"ParamName1=ParamName1Content&ParamName2=ParamName2Content&..."curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");// 设置为Postcurl_easy_setopt(curl, CURLOPT_POST, 1);// 发送res = curl_easy_perform(curl);if(res != CURLE_OK){// 获取详细错误信息char* szErr = curl_easy_strerror(res);fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr);}// 清空 curl_easy_cleanup(curl);// 释放表头 curl_slist_free_all (headerlist); return 0; }
POST文件
#include <stdio.h> #include <curl/curl.h>size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid);int main(void) {CURL* curl = NULL;CURLcode res;curl = curl_easy_init();if(curl == NULL) {return CURLE_FAILED_INIT;}struct curl_slist* headerlist = NULL; struct curl_httppost* formpost = NULL;struct curl_httppost* lastptr = NULL;std::string strResponse; // 回复 curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "ParamName1", CURLFORM_COPYCONTENTS, "ParamName1Content", CURLFORM_END);curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "ParamName2", CURLFORM_COPYCONTENTS, "ParamName2Content", CURLFORM_END);curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "ParamName3", CURLFORM_COPYCONTENTS, "ParamName3Content", CURLFORM_END);curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "registerImgs", CURLFORM_FILE, "C:/Image.png", CURLFORM_END); // 设置要上传的文件// 设置表单参数 curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);// 设置表头,表头内容可能不同headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); // 设置URLcurl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");// 设置参数,比如"ParamName1=ParamName1Content&ParamName2=ParamName2Content&..."curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");// 设置为Postcurl_easy_setopt(curl, CURLOPT_POST, 1);curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&strResponse);curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);// 发送res = curl_easy_perform(curl);if(res != CURLE_OK){// 获取详细错误信息char* szErr = curl_easy_strerror(res);fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr);}// 清空 curl_easy_cleanup(curl);// 释放表单 curl_formfree(formpost);// 释放表头 curl_slist_free_all (headerlist); return 0; }size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid) {std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);if( NULL == str || NULL == buffer ){return -1;}char* pData = (char*)buffer;str->append(pData, size * nmemb);return nmemb; }
转载于:https://www.cnblogs.com/liuzhenbo/p/11053531.html
C++用libcurl通过HTTP以表单的方式Post数据到服务器相关推荐
- qt向服务器传输文字_Qt 模拟 HTTP 表单提交文字或文件到服务器
传统通过 HTTP 表单的方式来上传文件在 Web 中实现是非常简单的,一个表单中加几个域填写上对应的内容提交就可以了,但如果通过 Qt 来实现就相对麻烦一点,不过我都总结好了代码,直接使用就可以了. ...
- 为ASP.NET MVC配置基于Active Directory的表单认证方式
为ASP.NET MVC配置基于Active Directory的表单认证方式 最近一直在研究基于Active Directory的表单认证方式,同时也在关注ASP.NET MVC的情况,同时也在应用 ...
- js实现Form表单submit提交截获数据(各浏览器通用)
js实现Form表单submit提交截获数据(各浏览器通用) js实现Form表单submit提交截获数据(各浏览器通用) No Comments | js , 安全 , PHP | by calms ...
- post 表单中常见的四种表单请求方式
//post 表单中常见的四种表单请求方式 typedef enum { postformURLEncoded, /*对应Content-Type: appli ...
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]
一.截图和示例共用Ext.FormPanel 1.1 截图 由于本文主要关注的是表单提交的几种方式,所以仅用了一个表单项以便于测试和减少示例代码. 1.2 示例共用Ext.FormPanel ...
- web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
web元件库.axure元件库.通用元件库.常用web组件.常用表单.框架.数据表单.导航栏.边框.图标.列表.日期时间选择器.评分组件.穿梭框.输入框.步骤条.图表组件.数据可视化.后台模板.时间轴 ...
- Javaweb 快速入门之jsp基本语法表单提交方式request对象
文章目录 一.jsp简介 二.jsp之表单提交方式 三.jsp内置函数 总结 一.jsp简介 1.jsp简介 (1)jsp全称:java server pages java服务 ...
- blur表单验证方式
表单验证方式 * 思路:* 1 给每个input添加失去焦点事件,输入完毕后进行校验* 校验给错误提示 * 2. 表单提交数据的时候 进行判断 * 是否有错误信息提示 如果有,不能提交数据 <b ...
最新文章
- 关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM
- UA MATH567 高维统计IV Lipschitz组合8 随机投影与John-Lindenstrauss引理
- PostgreSQL 分页——示例
- .net 从txt中读取行数据_【VBA项目】从指定文件中读取数据并绘制图表
- (21)css3盒模型box-sizing属性
- matepad适配鸿蒙,消息称华为 MatePad2 搭载骁龙888 4G 华为鸿蒙OS计划适配高通平台...
- 网络嗅探器如何嗅探_SQL Server中的运行时常量嗅探
- 基于深度学习算法的NLP集成工具
- Spring boot 跨域请求实现方式汇总
- 磁盘不见了只剩一个c盘_教你如何处理只剩一个C盘
- 使用CSS制作图片相框以及图片放大旋转效果
- 过往云烟~如梦随风飘!!!
- 2015.4.28 今天开博客了
- 使用Python查看sqlite3表结构
- 最新微信ipad协议 CODE获取 公众号授权等
- 台式机安装EXSI,通过官方方式定制安装包
- 元宇宙-漫游世界后与Cocos一起看湖南卫视直播
- 当IM和同学录走到一起
- 2008年世界顶级杀毒软件排行榜
- C# Winform添加背景图片后加载的时候控件卡
热门文章
- 跳槽必加薪?跳槽是涨薪最快的方式么
- python中单下划线(_)和双下划线(__)的特殊用法 还等什么
- 【TensorFlow】TensorFlow函数精讲之tf.constant()
- 经验 | 清华大学计算机系教授~浅谈研究生学位论文选题方法
- Python优雅地可视化数据
- 数据结构(十)二叉排序树
- angular中如何定义全局变量_如何在Angular 2 / Typescript中声明全局变量?
- android tcp socket框架_花了一个星期,我终于把RPC框架整明白了
- 均匀化退火时间_热处理4把火:淬火、回火、正火、退火,都分清楚了么?
- wamp惯用的php框架_wamp集成环境php多版本搭建(php5.5,php5.6,php7.0.6)