[转]使用 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. Linux curl 命令下载文件

    引用自http://blog.csdn.net/wh211212/article/details/542859 […]...

  2. 21.Ajax原理及步骤(get、post)

    https://www.cnblogs.com/qianguyihao/p/8485028.html...

  3. Linux curl 表单登录或提交与cookie使用

    Linux curl 表单登录或提交与cookie使用   本文主要讲解通过curl 实现表单提交登录。单独的 […]...

  4. HTTP 中 GET 与 POST 的区别(详解)

    HTTP协议中POST与GET请求实质上的区别 我们都知道GET和POST是HTTP请求的两种基本方法,最直观 […]...

  5. GET和POST两种基本请求方法的区别

    GET和POST是什么? GET和POST是HTTP请求的两种基本方法 以下几点直观的区别就是GET把参数包含 […]...

  6. curl 发送post请求 – 星河赵

    curl 发送post请求 curl curl http://127.0.2.1:5353/user/get_ […]...

  7. [Java] JavaMail 发送 html 格式、带附件的邮件

    本案例演示发送 html 格式,可带附件的邮件发送。发送纯文本邮件的例子可参照上一篇博文JavaMail 简单 […]...

  8. C#模拟HTTP协议请求

    1       前言 http协议详解参考HTTP协议。 WEB常用Get和Post请求。 地址栏参数:url […]...

随机推荐

  1. HTML 编辑器

    HTML 编辑器推荐 可以使用专业的 HTML 编辑器来编辑 HTML,菜鸟教程为大家推荐几款常用的编辑器: […]...

  2. MySQL查看版本号的五种方式介绍

    Mysql查看版本号的五种方式介绍 MySQL查看版本号的五种方式介绍 1 命令行模式登录MySQL [roo […]...

  3. 机器学习之RNN —LSTM原理及实现详解

    (1)前言 (2)LSTM 简介 (3)LSTM原理及实现 (4)LSTM的优缺点     —&# […]...

  4. mysql一键安装

    #卸载mysql自带的mariadb#yum list installed | grep mariadb#yu […]...

  5. D – 活动选择

    Description 学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团 […]...

  6. 一个程序员的自白(庸人再扰)

      认识他的人,可能都以为他是一个非常自律的人,但在我眼中,他只是一个停留在皮囊自律而内在随时会混乱的一个人。 […]...

  7. JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入

    1 学习计划 1、业务受理需求分析 n 业务通知单 n 工单 n 工作单 2、创建业务受理环节的数据表 n 业 […]...

  8. java中不带package和带package的编译运行方式

    java中不带package的程序和带package的程序编译的方式是不同的。 一、不带package的程序 […]...

展开目录

目录导航