myfreax

Curl POST JSON 请求

Curl是用于在本地计算机与远程服务器之间传输数据的命令行工具

4 min read
By myfreax
Curl POST JSON 请求
Curl POST JSON 请求

Curl是用于在本地计算机与远程服务器之间传输数据的命令行工具。使用curl时您可以使用HTTP,HTTPS, SCP SFTPFTP等协议下载或上传数据。

在本教程中,我们将说明如何在Linux使用Curl发送POST请求。HTTP POST方法主要用于将数据发送到远程服务器。

我们也说明了如何使用Curl模拟HTML表单发送POST请求,上传文件,指定内容类型Content-Type等。

POST请求

使用Curl命令发送POST请求的语法形式是curl -X POST [options] [URL]

-X选项指定与远程服务器通信时使用的HTTP请求方法。在本教程我们仅说明POST方法。

在发送POST请求时你可使用Content-Type内容类型声明请求正文的数据格式。即body的数据类型。

通常POST请求是通过HTML表单发送的。表单的数据通常以multipart/form-dataapplication/x-www-form-urlencoded进行编码。

Curl POST JSON 请求

如果你需要在请求体,也就是POST的Body中发送JSON格式的数据,你必须指定内容类型为application/json

Curl命令的-H选项允许你指定任何内容类型,但是某些内容类型需要服务器的支持,否则不会被处理或者返回服务器错误。

以下Curl命令将POST请求的内容类型设置为application/json并发送JSON字符串数据。

curl -X POST -H "Content-Type: application/json" \
    -d '{"email": "web@myfreax.com", "website": "www.myfreax.com"}' \
    https://example/contact

Curl POST JSON并上传文件

curl -i -X POST -H "Content-Type: multipart/mixed" -F "blob=@/Users/username/Documents/bio.jpg" -F "metadata={\"edipi\":123456789};type=application/json" http://localhost:8080/api/v1/user/

Curl 上传文件

使用Curl 命令上传文件,只需在文件路径之前添加@符号。文件可以是任何类型文件包括图像,文档等。

这里还有一点值得一提的是Curl 命令好像不能在发送文件的时候,同时指定内容类型为application/json,也就是发送JSON数据。

这是因为在使用-F选项时,Curl 命令将自动设置内容类型为application/x-www-form-urlencoded,在一个请求中也不能设置两个内容类型。

curl -X POST -F 'image=@/home/user/Pictures/wallpaper.jpg' http://example.com/upload

Curl HTML表单multipart/form-data

如果你需要使用Curl 命令模拟表单的请求,可以使用Curl 命令的-F选项创建POST请求并且使用multipart/form-data进行编码。

-F选项允许你指定multipart的数据。Curl 命令自动将内容类型设置为multipart/form-data发送数据。

也可以使用-F选项指定多个数据,数据的形式是以field=value键值对的方式指定。

例如以下Curl 命令将模拟HTML表单发送两个字段的数据,字段website 值是myfreax.com,字段email 值是web@myfreax.com。最后是指定请求的URL。

curl -X POST -F 'website=myfreax.com' -F 'email=web@myfreax.com' https://wwww.myfreax.com/contact.php

Curl HTML表单x-www-form-urlencoded

发出POST请求的另一种方法是使用Curl 命令的-d选项。在使用-d选项时Curl命令使用application/x-www-form-urlencoded对数据进行编码。

也会指定内容类型为application/x-www-form-urlencoded。使用这种方式发送的请求,就是使用查询字符串发送数据。

如果你需要发送大量的数据你不必多次使用-d选项,可以使用&符号合并数据,比如website=myfreax&email=myfreax@example.com。

curl -X POST -d 'name=myfreax' -d 'email=myfreax@example.com' https://example.com/contact.php

#上面和下面的命令是等价的
curl -X POST -d 'name=myfreax&email=myfreax@example.com' https://example.com/contact.php

更多示例

Linux Curl命令详解教程 | myfreax
curl是用于在本地计算机与远程服务器之间传输数据的命令行工具
Linux Curl命令详解教程

结论

我们已向您展示了如何在Linux 使用Curl 命令发送POST请求。如需参考更多实例,请阅读我们的教程:Linux Curl 命令详解教程

如果您有任何问题或反馈,请随时发表评论。