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

Curl是用于在本地计算机与远程服务器之间传输数据的命令行工具。使用curl时您可以使用HTTP,HTTPS, SCP , SFTP和FTP等协议下载或上传数据。
在本教程中,我们将说明如何在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-data
或application/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 命令发送POST请求。如需参考更多实例,请阅读我们的教程:Linux Curl 命令详解教程。
如果您有任何问题或反馈,请随时发表评论。