使用 curl 发送 POST 请求的几种方式

本文介绍了如何使用curl命令行工具进行四种常见的HTTPPOST请求,包括application/x-www-form-urlencoded、multipart/form-data、application/json以及文件内容作为数据提交。

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
### 如何在Linux命令行中使用curl发送GET和POST HTTP请求 #### 发送GET请求 `curl` 是一个强大的命令行工具,用于通过 URL 进行数据传输。要发送 GET 请求,可以直接提供目标 URL 和查询参数。以下是具体示例: ```bash curl http://127.0.0.1:8080/login?username=admin&password=12345678 ``` 此命令向 `http://127.0.0.1:8080/login` 地址发送了一个带有用户名和密码作为查询参数的 GET 请求[^1]。 如果需要更复杂的场景,比如设置自定义头部信息(例如 User-Agent),可以通过 `-H` 参数实现: ```bash curl -H "User-Agent: Mozilla/5.0" http://127.0.0.1:8080/api/data ``` 这会在请求头中加入指定的 User-Agent 字段。 --- #### 发送POST请求 对于 POST 请求,通常用来提交表单或者上传 JSON 数据。下面是一些常见的用法: ##### 提交表单数据 当需要以键值对的形式提交表单时,可以使用 `-d` 或者 `-F` 参数来完成操作。例如: ```bash curl -X POST -d 'name=Jason&email=jason@example.com' http://127.0.0.1:8000/register ``` 这里的数据是以 `application/x-www-form-urlencoded` 的方式编码并传递给服务器[^1]。 另一种方法是使用 `-F` 参数,它更适合处理文件上传或多部分表单的情况: ```bash curl -X POST -F 'file=@/path/to/file.txt' http://upload.example.com/files ``` 上述命令将本地路径 `/path/to/file.txt` 中的内容作为一个名为 `file` 的字段上传至目标地址。 ##### 提交JSON数据 现代 API 往往接受 JSON 格式的输入,在这种情况下,我们需要显式声明 Content-Type 并附带相应的 JSON 负载: ```bash curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"secret"}' http://api.example.com/authenticate ``` 这段脚本设置了请求头中的 MIME 类型为 `application/json` 同时提供了序列化的 JSON 对象作为主体内容。 --- #### 高级功能:连续执行多个请求 有时可能希望在一个流程里先后发出不同类型的请求,比如先登录再获取资源列表。这时可以用到 `--next` 选项分离各个独立的部分而不互相干扰: ```bash curl -d 'score=95' http://example.com/post_score.cgi --next http://example.com/get_results.html ``` 这条语句先是完成了分数记录的动作紧接着访问另一个页面展示成绩详情[^2]。 --- ### 总结 以上介绍了几种典型的基于 Linux 终端环境下的 curl 工具应用实例,涵盖了基本的 GET 查询以及多种形式的 POST 方法调用情景。掌握这些技巧有助于日常网络调试工作或是自动化运维任务当中更加高效便捷地交互服务接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值