[转]使用 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. java使用MQTT发送数据

    1.建立Maven项目点击文件->新建->项目 2.配置pom.xml文件<project xmlns="http://maven.apache.org/P...

  2. Python接口测试自动化说明及代码实例:含get、post、put、delete等方法

    一、接口说明文档 环境准备: 安装火狐 安装插件: httprequester https://addons. […]...

  3. nodejs post 基于fetch

    function sleep(interval:number) {return new Promise( resolve => {setTimeout(resolve, interval)})}async function _qu...

  4. 4.计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动

    计算机的启动 地址空间分成了两部分ROM和RAM ROM位于主板上,是主板生产的时候就有的一部分 机器加电之后 […]...

  5. PHP实现CURL发送请求

    public function curl($url, $params = false, $ispost = 0){$httpInfo = array();//初始化$ch = curl_init();/*CURL_HTTP_VE...

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

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

  7. CURL post请求

    1 /*****post请求******/ 2 public function postDataCurl($u […]...

  8. requests模块的使用

    写在前面的话:   在学习爬虫入门时,会常用到requests模块,熟悉这个模块的使用需要熟悉http,htt […]...

随机推荐

  1. 《k8s-1.13版本源码分析》-调度预选

    本文大纲 预选流程 predicate的并发 一个node的predicate predicates的顺序 单 […]...

  2. Flutter学习笔记(11)–文本组件、图标及按钮组件

    如需转载,请注明出处:Flutter学习笔记(10)–容器组件、图片组件 文本组件 文本组件(te […]...

  3. 使用 CXF 做 webservice 简单例子

      Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许 […]...

  4. 小白开学Asp.Net Core 《七》

    小白开学Asp.Net Core 《七》             — — .Net Core 数据保护组件 1 […]...

  5. CentOS7+mysql5.6配置主从

    一、安装环境 操作系统:CentOS-7-x86_64-DVD-1611.iso数据库版本:mysql-5.6 […]...

  6. 如何通过ip地址来获取主机名字 – v朋朋

    一、如果获取本主机名字和ip   1.按键盘上的win键+r键打开运行,然后输入cmd再回车打开控制台     […]...

  7. 头条二面

      还是要diss一下周六的平安总部面试,面试体验渣到极点,以至于我已经在心里把所有平安职位拉黑。   二面直 […]...

  8. 二维数组

    <script type=”text/javascript”>// 1.数 […]...

展开目录

目录导航