http post

CURL发送POST请求 发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。-I 向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来。-L 让 HTTP 请求跟随服务器的重定向。-O 将服务器回应保存成文件,并将 URL 的最后部分当作文件名。用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。-i 打印出服务器回应的 HTTP 标头。-A 指定客户端的用户代理标头,即。-H 添加 HTTP 请求的标头。-x 指定 HTTP 请求的代理。-X 指定 HTTP 请求的方法。 阅读详情

HTTP Post
    这一章介绍如何使用libcurl以Post方式向HTTP服务器提交数据。

    方法一,也是最简单的方式,就像html中使用<form>标签提交数据一样,只需向libcurl提供一个包含数据的字符串即可。下面是笔者学习过程中的一个demo程序:
int main(int argc, char **argv)
{
code = curl_global_init(CURL_GLOBAL_WIN32);
CURL *easy_handle = curl_easy_init();

curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx);
// 单个域post
curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, "name=jgood&address=hangzhou");
code = curl_easy_perform(easy_handle);

curl_easy_cleanup(easy_handle);
curl_global_cleanup();

return 0;
}

    在asp.net Web服务器上跟踪调试,得到客户程序提交上来的数据,下面是截图:

    上面的代码够简单吧~_~ 有时候,我们需要提交一些二进制数据到HTTP服务器,使用方法一就不行了,因为方法一中实际提交的是一个字符串,字符串遇到/0就表示结束了。所以在上传二进制数据的时候,必须明确的告诉libcurl要提交的数据的长度。在上传二进制数据的时候,还应该设置提交的Content-Type头信息。下面的示例代码:
int main(int argc, char **argv)
{
curl_global_init(CURL_GLOBAL_WIN32);
CURL *easy_handle = curl_easy_init();


// 上传二进制数据
char data[] = { 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0 };
curl_slist *http_headers = NULL;
http_headers = curl_slist_append(http_headers, "Content-Type: text/xml");

curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, http_headers);
curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx);
curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDSIZE, sizeof(data));

curl_easy_perform(easy_handle);

curl_slist_free_all(http_headers);
curl_easy_cleanup(easy_handle);
curl_global_cleanup();


return 0;
}

    在asp.net Web服务器上跟踪调试,得到客户程序提交上来的二进制数据,下面是截图:

     上面介绍的两种方式,可以完成大部分的HTTP POST操作。但上面的两种方式都不支持multi-part formposts。Multi-part formposts被认为是提交二进制数据(或大量数据)的更好方法,可以在RFC1867, RFC2388中找到他们的定义。何为Multi-part?其实,就我理解,就是在Post提交的时候,有不同的数据单元,每个单元有自己的名称与内容,内容可以是文本的,也可以是二进制的。同时,每个数据单元都可以有自己的消息头,MIME类型,这些数据单元组成一个链表,提交到HTTP服务器。 libcurl提供了方便的api用于支持multi-part formposts。使用curl_formadd函数,可以添加不同的数据数据单元,然后提交到服务器。下面是一个multi-part formposts的例子

int main()
{

               curl_global_init(CURL_GLOBAL_WIN32);
               CURL *easy_handle = curl_easy_init();

// 使用multi-parts form post
curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx);
curl_httppost *post = NULL;
curl_httppost *last = NULL;

// 文本数据
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, "JGood", CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "address", CURLFORM_COPYCONTENTS, "HangZhou", CURLFORM_END);

// 文本文件中的数据
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILECONTENT, "ReadMe.txt", CURLFORM_END);
curl_easy_setopt(easy_handle, CURLOPT_HTTPPOST, post);
curl_easy_perform(easy_handle);

curl_formfree(post);
curl_easy_cleanup(easy_handle);
curl_global_cleanup();


return 0;
}
     最后要说明的是,所有在easy handle上设置的属性都是”sticky”的,什么意思?就是说在easy handle上设置的属性都将被保存,即使执行完curl_easy_perform之后,这些属性值仍然存在。通过将CURLOPT_HTTPGET设为1可以使easy handle回到最原始的状态:
curl_easy_setopt(easy_handle, CURLOPT_HTTPGET, 1L);

显示进度
    libcurl支持通信过程中的进度控制。通过将CURLOPT_NOPROCESS设置为0开启进度支持。该选项默认值为1。对大多数应用程序,我们需要提供一个进度显示回调。libcurl会不定期的将当前传输的进度通过回调函数告诉你的程序。回调函数的原型如下:
int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow);

    通过CURLOPT_PROGRESSFUNCTION注册该回调函数。参数clientp是一个用户自定义指针,应用程序通过 CURLOPT_PROCESSDATA属性将该自定义指定传递给libcurl。libcurl对该参数不作任何处理,只是简单将其传递给回调函数。

在C++中使用libcurl
    在C++中使用libcurl跟在C语言中没有任何区别,只有一个地方要注意:回调函数不能是类的非静态成员函数。例如:
class AClass {
static size_t write_data(void *ptr, size_t size, size_t nmemb, void *ourpointer)
{
/* do what you want with the data */
}
}


文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/c++/cppjs/20100603/207496_2.html

cURL进行HTTPS连接POST数据 本文由 易维信-【EVTrust】SSL证书技术中心编写 PHP 下  function vpost($url,$data){ // 模拟提交数据函数     $curl = curl_init(); // 启动一个CURL会话     curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址     curl_setopt($curl, CU 阅读详情

相关推荐

Go 对HTTP POST的支持

在net/http标准包的client.go文件中,Post方法使用POST请求方式访问指定的URL。下面是标准包中的定义,可以看到它是对DefaultClient.Post方法的包裹。如果你想使用自定义的headers,那么需要使用NewRequest和DefaultClient.Do方法。 func Post(url, contentType string, body io.Reader) (...

benben的博客 8850

使用curl命令发送https post协议

curl

weixin_43916650的博客 2500

HTTP中 GET 和 POST 请求的区别

一、http 的请求报文 GET 和 POST 其实都是 HTTP 的请求方法。 除了这 2 个请求方法之外,HTTP 还有 HEAD、PUT 、DELETE、TRACE、CONNECT、OPTIONS 这 6 个请求方法。 所以HTTP 的请求方法共计有 8 种,它们的描述如下所示: 请求方法 描述 get 请求指定的页面信息,并返回实体主体 post 向指定资源提交数据新型处理请求(例如提交表单或上传文件)。数据被包含在请求实体中。post 请求可能会导致行的自愿建立和

m0_61700036的博客 1009

curl post https_巧用 curl

初识 curlcurl是命令行工具函数,是对web服务器发起请求。curl使用纯熟是完全可以取代图形化界面工具postman的。做为前端的小白,初次结识curl还是因为一次项目发布问题。node中间层项目开发完成之后,走发布流程发布,发布完成之后通过域名访问该项目,但是此时就是见证bug的时候,项目访问白页,控制台也不报错,完全不知道error发生在什么地方,这时候只能通过跳板机远程访问项目发布的...

weixin_39934675的博客 970

C语言实现https客户端

C语言实现openssl的https客户端post方法使用,可以传入json字符串的格式,测试的例子,可以使用

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

HTTP POST 方法

框架用多了,反而底层的东西都忘记了,今天把HTTP POST方法看了一下,总不是很明白,用wireshark抓包以后,终于有了一点明白,共享之。 这个是用wireshark抓的一个数据包,可以看到 POST的数据是以 &  符号 连接多个name=value 这样的形式连接起来的。其中每一个name=value都是input 标签的name 和value属性。 这样的标

成轩的专栏 8928

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1330

HTTP中GET和POST的区别

从学习编程开始,关于get请求和post请求的问题就一直困扰着我。今天就简单说说两者的区别。 先来看看HTTP是什么? HTTP: HTTP协议:(HyperText Transfer Protocol超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的www文件都必须遵守的标准。是基于TCP/IP的关于数据在万维网中如何让通讯的协议。 HTTP总共有8中请求方法,我们最常见也是最...

cuiwkong的博客 1万+

如何设计ADAS系统功能状态机(一)

状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。

supass2018的博客 1615

手把手教你用FPGA实现SGMII接口:从IP核配置到板级调试全流程

本文详细介绍了如何在Xilinx 7系列FPGA上实现SGMII(Serial Gigabit Media Independent Interface)接口的全流程,包括IP核配置、约束编写和硬件调试。通过具体的硬件选型建议、软件工具链配置和PCB设计规范,帮助开发者快速构建稳定可靠的千兆通信链路,并提供了常见故障排查和性能优化技巧。

weixin_29194693的博客 296

HTTP——GET和POST请求

一、http协议:客户端和服务器之间通信时,发送的数据要遵守的规则,称为HTTP协议,协议中 的数据由称为报文。 HTTP协议属于应用层的面向对象的协议,5大特点:1)支持C/S模式;2)简单快速;3)灵活;4)无连接;5)无状态 HTTP是无状态无连接的: 1.无连接: 每一个访问都是无连接的,服务器挨个处理访问队列里的访问,处理完一个就关闭连接,然后处理新请求,即一次只处理一个请求,请求时建立连接,请求完释放连接,但是会存在重复建立连接的低效性,由此提出了Keep-Alive,使...

weixin_42109930的博客 1万+

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1742

HTTP协议之POST方法

和GET方法一样,POST方法也是HTTP协议中的一个重要组成部分。POST方法一般用来向目的服务器发出请求,并附有请求实体。POST被设计成用统一的方法实现下列功能:      o 对现有资源的注释(Annotation of existing resources);      o 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息;      o 提交数据块,如将表格(form)的结果提交给数

7267

分布式存储系统关于GDPR条例中的数据清除原则

文章目录前言HDFS存储系统数据的完全删除基于加解密的输入输出流的数据保护方案 前言 关于GDPR是什么,可能许多同学之前并不太了解,至少笔者在之前也是不清楚的。GDPR全称为通用数据保护条例,General Data Protection Regulation。它是一项来自欧盟的关于计算机数据保护相关的条约,旨在规范系统如何收集,管控用户私人数据的种种行为。但是当前的一些存储系统并没有完全符合...

走在前往架构师的路上 3623

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1239

curl http之post与formpost

curl http之post与formpostcurl安装Boostpost示例postform示例 - filepostform示例 - fileEND curl curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。cURL支持的通信协议有FTP、...

destiny 3803

SOME/IP协议详解「1.0·概述」

主要讲解什么是someip,

雪云飞星的博客 5367

http中get和post的区别

http中get和post的区别导语相同点不同点关于参数关于回退关于缓存关于请求包对比总结 导语 get和post的区别是面试中经常会被问到的问题。 那么同样作为http请求,他们之间究竟有什么异同呢? 相同点 从本质上讲,get和post都是http请求,都是tcp连接,是无区别的。 不同点 关于参数 考虑参数的位置:get请求的参数位于url中,而post请求的参数位于request body...

weixin_43621681的博客 5227

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Http get post

GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而P...

weixin_43915921的博客 690

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

http get、post、put

这个例子中,我们发送了一个POST请求到"/path",并且我们设置了HTTP头部字段"Content-Type"为"application/x-www-form-urlencoded",然后我们发送了两个字段"field1"和"field2"。与 GET 不同,POST 请求会把数据和请求一起发送,数据不会附在 URL 上,而是在请求的消息体中。PUT:PUT 方法用于向指定资源位置上传其最新内容,PUT 方法是幂等的,即无论调用一次还是多次,服务器上的结果都是一样的。PUT 方法通常用于更新资源。

琅嬛福地 2821

HTTP POST GET详解

一 原理区别    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETEURL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST

ClsData的专栏 13万+

HTTP中的GET、POST方法

Jsp中的forward和redirect一、forward和redirect的区别1.在绝对路径与相对路径相对路径:表现相同绝对路径:表现不同2.实现机制forword:直接转发----服务器行为Redirect:重定向----客户端行为二、运用场景forwardredirect 一、forward和redirect的区别 1.在绝对路径与相对路径 如果使用的URL网址是以“/”开头的,那么这个...

我的博客 1073

http请求中get与post

前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解。 在网上摘到一段比较有用的话 减低服务器流量压力 根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更

weixin_45661641的博客 1387

java 实现http post,Java实现HTTP POST方式

Java实现HTTP POST方式:HttpPostUtil.javaimport java.nio.charset.Charset;import lombok.extern.slf4j.Slf4j;import org.apache.http.client.fluent.Content;import org.apache.http.client.fluent.Form;import org.ap...

weixin_29323049的博客 1972

HTTP的GET和POST的区别

前言前面的一张我们提到了http协议,介绍了URL,请求报文,响应报文,以及http的特点,相信大家现在对于http一定有所了解了,今天我们主要从http的两种基本方法GET和POST来带大家了解下## HTTP-GET方法 要提到方法我们首先就需要回顾一下HTTP的报文格式。<request line> <headers> <blank line> [<request-body>]我们都知

leap的博客 1254
上一篇: 一个关于curl post提交返回数据的问题
下一篇: http post easy 客户端
hn3e21
博客等级 码龄17年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值