myfreax

Curl POST JSON 请求

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

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

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

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

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

POST 请求

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

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

在使用 Curl 发送 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 上传文件

使用 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 POST JSON 并上传文件

在发送 JSON 数据并上传文件到服务器时,需要设置 header 的 Content-Type 为 multipart/mixed,指示 Curl 命令以混合的格式发送数据。

除了设置 header 的 Content-Type 之外,发送 JSON 格式数据是以 Curl 命令的 -F 选项指定要发送的 JSON 字符串,注意 JSON 需要使用单引号转义。

因此命令最终形式是 curl -X POST -H "Content-Type: multipart/mixed" -F blob=@文件路径 -F 'metadata=JSON 字符串;type=application/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 HTML 表单 multipart/form-data

如果你需要使用 Curl 命令模拟 HTML 表单的请求,可以使用 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。使用这种方式发送的请求,就是使用 URL 查询字符串发送数据。

如果需要发送大量的数据不必多次使用 -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 请求。如果您有任何问题或反馈,请随时发表评论。