[转]使用 curl 发送 POST 请求的几种方式

lyggqm 2021-12-08 原文

HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式。做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容是如何使用命令行工具 curl 来进行各种方式的 POST 请求。

application/x-www-form-urlencoded

最常见的一种 POST 请求,用 curl 发起这种请求也很简单。

1
$ curl localhost:3000/api/basic -X POST -d \'hello=world\'

multipart/form-data

这种请求一般涉及到文件上传。后端对这种类型请求的处理也复杂一些。

1
$ curl localhost:3000/api/multipart -F raw=@raw.data -F hello=world

application/json

1
$ curl localhost:3000/api/json -X POST -d \'{"hello": "world"}\' --header "Content-Type: application/json"

跟发起 application/x-www-form-urlencoded 类型的 POST 请求类似,-d 参数值是 JSON 字符串,并且多了一个 Content-Type: application/json 指定发送内容的格式。

这个例子和 application/x-www-form-urlencoded 中的例子发起的请求,到了 Web 后端经过解析后,得到的结果都是 hello: world 键值对。

文件内容作为要提交的数据

如果要提交的数据不像前面例子中只有一个 hello: world 键值对,数据比较多,都写在命令行里很不方便,也容易出错,那么可以把数据内容先写到文件里,通过 -d @filename 的方式来提交数据。这是 -d 参数的一种使用方式,所以前面用到 -d 参数的地方都可以这样用。

实际上就是把 -d 参数值写在命令行里,变成了写在文件里。跟 multipart/form-data 中上传文件的 POST 方式不是一回事。@ 符号表明后面跟的是文件名,要读取这个文件的内容作为 -d 的参数。

例如,有一个 JSON 文件 data.json 内容如下:

1
2
3
4
5
{
    "hello": "world",
    "xxx": "yyy",
    "a": ["ooo", "mmm"]
}

就可以通过

1
$ curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json"

来提交数据。

如果要用 application/x-www-form-urlencoded 方式提交,后端解析出来同样的数据,那么 -d 的参数是这样的(注意数组参数的写法)

1
hello=world&xxx=yyy&a[]=ooo&a[]=mmm

把这个字符串直接作为 -d 的参数或者把它写到文件 data.txt 然后通过 -d @data.txt 的方式,发起 POST 请求,行为和结果是一样的。

1
2
3
$ curl localhost:3000/api/basic -X POST -d \'hello=world&xxx=yyy&a[]=ooo&a[]=mmm\'

$ curl localhost:3000/api/basic -X POST -d @data.txt

版权声明:本文为lyggqm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lyggqm/p/11502835.html

[转]使用 curl 发送 POST 请求的几种方式的更多相关文章

  1. 天猫登录源码 POST C#

    HttpHelper 请从网络中搜索;       public partial class LoginTMa […]...

  2. curl 获取网页及post数据

    使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓 取的网页,然后就可以 […]...

  3. curl 模拟 GET\\POST 请求,以及 curl post 上传文件

    curl GET 请求 curl命令 + 请求接口的地址。 curl localhost:9999/api/d […]...

  4. springboot + post 中文乱码

    去检查你的 filter 配置,是否配置了一个最高优先级的 filter, 这个最高优先级的 filter 会 […]...

  5. Linux curl 命令模拟 POST/GET 请求

    Linux curl 命令模拟 POST/GET 请求   本文链接:https://blog.csdn.ne […]...

  6. CURL 发送POST请求 – 王大拿

    CURL 发送POST请求 CURL 发送POST请求 curl -H "Content-Type: appl […]...

  7. Java POST请求案例

    Java POST请求案例 <<<<<<<<<<& […]...

  8. 数据挖掘_requests模块的post方法

    前面已经跟大家讲了requests模块的get方法,这一篇文章我们要介绍的是requests模块中的另一个比较 […]...

随机推荐

  1. 2019年超融合将飞速发展 三大趋势不容错过

    “超融合”这个词语本身听起来像是未来主义。超融合不再只是支持同质虚拟桌面基础设施(VDI)环境的基础架构,如今 […]...

  2. 高效使用Chrome浏览器,你可能不知道的10个技巧。

    高效使用Chrome浏览器,你可能不知道的10个技巧。 10 tips you may not know ab […]...

  3. Axure原型设计之“如何使链接跳转到另一个页面里动态面板的某个状态?”

    1、先在所要跳转的链接处添加用例,并设置两个事件,一个是页面间的跳转事件(简单略过),还有一个事件:“设置 变 […]...

  4. 免费SSL证书申请 2018年至简教程

    Let’s Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozi […]...

  5. 关于搬运CSDN上学生信息管理系统的阅读与二次开发 – 时埋

    关于搬运CSDN上学生信息管理系统的阅读与二次开发 关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码 […]...

  6. “中兴捧月”比赛之——二叉查找树(BST)树的最短路径Java求解

    问题描述:  BST树,又称二叉查找树,求其到所有叶子节点路径的最小值 测试用例一:  10       5  […]...

  7. android新闻App源码、仿微信源码、地图音乐源码等

    Android精选源码 一款实用的休闲类App,新闻视频和技术应有尽有。 android实现交互式K线图表源码 […]...

  8. HTTPS(二)证书合法性校验

    在客户端与服务端的连接过程中,服务端会把证书发给客户端,客户端需要基于CA认证体系对证书的合法性进行验证一、 […]...

展开目录

目录导航