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 请求。如果您有任何问题或反馈,请随时发表评论。