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); // 设置URL
curl_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"); // 设置为Post
curl_easy_setopt(curl, CURLOPT_POST, ); // 发送
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 ;
}
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); // 设置URL
curl_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"); // 设置为Post
curl_easy_setopt(curl, CURLOPT_POST, ); 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, );
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, );
curl_easy_setopt(curl, CURLOPT_TIMEOUT, ); // 发送
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 ;
} 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 -;
} char* pData = (char*)buffer;
str->append(pData, size * nmemb);
return nmemb;
}
C++用libcurl通过HTTP以表单的方式Post数据到服务器的更多相关文章
- html表单提交方式
xml 表单提交方式: * 使用submit提交 <form> 要提交的数据 <input type="submit" /'> </form> ...
- Servlet路径跳转1---使用相对路径和绝对路径,在页面上调用servlet的路径写法(超链接的方式和表单的方式)
课程1-13 http://www.imooc.com/video/5554 Servlet路径跳转: 绝对路径:放在任何地方都对的路径 相对路径:相对于当前资源的路径 index文件 加上/,表 ...
- c#_表单处理方式
阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Aj ...
- ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传
最近在做 Android 端文件上传,要求采用 form 表单的方式提交,项目使用的 afinal 框架有文件上传功能,但是始终无法与php写的服务端对接上,无法上传成功.读源码发现:afinal 使 ...
- php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中
php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...
- JavaWeb学习日记----表单提交方式
1.表单提交方式 (1) 使用input控件中的submit提交 代码如下: <!DOCTYPE html> <html lang="en"> <he ...
- 雷林鹏分享:jQuery EasyUI 表单 - 过滤下拉数据网格
jQuery EasyUI 表单 - 过滤下拉数据网格 下拉数据网格(Combogrid)组件和下拉框(Combobox)组件的共同点是,除了都具有下拉面板以外,它们都是基于数据网格(Datagrid ...
- Ext表单提示方式:msgTarget
Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; Ext表单提示方式:msgTarget:有4中方式:qtip,t ...
- form表单提交方式
form表单提交方式总结一下: 一.利用submit按钮实现提交,当点击submit按钮时,触发onclick事件,由JavaScript里函数判断输入内容是否为空,如果为空,返回false, 不提交 ...
随机推荐
- POJ 1655:Balancing Act
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10311 Accepted: 4261 De ...
- 关于连接查询主要是左右连接查询中,where和on的区别
工作中,今天用到左连接查询,我自己造的数据,需要根据条件进行筛选,但是筛选不符合我的要求,最终发现是左右连接中where和on的区别,在作怪,工作中用的表关联太多,我下面简化要点,仅仅把注意点写个简单 ...
- Vulkan SDK 之Render Pass
Create a Render Pass A render pass describes the scope of a rendering operation by specifying the co ...
- Oracle Exadata 学习笔记之核心特性Part1
近年来,国内众多厂商都有一体机的产品,不过更多都是围绕硬件本身的堆砌和优化,那么这些产品和Oracle一体机最大的区别在哪里呢?最近读了李亚的<Oracle Exadata技术详解>,系统 ...
- SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问
最近项目做到几千个学生分别去人脸识别记录(目前约630000行)中查询最后一次记录,可想而知性能这块是个麻烦.于是乎,GET到了SQL Server Profiler和数据库引擎优化顾问这俩工SHEN ...
- Swift 访问权限
internal 内部的 1.默认情况下所有的类&属性&方法的访问权限都是internal 2.在本模块(项目/包/target)中可以访问 private 私有的 1.只有在本类中访 ...
- css把图片方框变为圆角
border-radius:10px; 多少就设多少像素,个人需求.
- SpringBoot Application事件监听
SpringBoot Application共支持6种事件监听,按顺序分别是: ApplicationStartingEvent:在Spring最开始启动的时候触发 ApplicationEnviro ...
- 【LeetCode】N皇后I
[问题]n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案.每一种解法包含一个明确的 n 皇后问 ...
- 如何把控好Essay写作结构
留学生在国内写过作文,但是对于essay写作到底了解多少呢?大家觉得essay写作太难是语言问题,但是大家要明白,老师对于内容的考察远重于对语言的考察.同学们的essay写作如果能做到言之有理,自圆其 ...