当使用curl将文件POST或PUT到url时,有两种不同的方式来加载文件内容:
-T ${file_path}
--data-binary @${file_path}
或-d $@{file_path}
(对于 ascii 数据文件)
这两个选项有什么区别?
答案1
要了解这些选项之间的差异,您可以阅读手册页或者做一些实验。
手册页
-d,--数据
将指定的数据发送到邮政向 HTTP 服务器发出请求,就像用户填写 HTML 表单并按下提交按钮时浏览器执行的操作一样。这将导致curl使用以下命令将数据传递到服务器内容类型应用程序/x-www-form-urlencoded。 [...]
-T, --上传文件
这会将指定的本地文件传输到远程 URL。 [...] 如果在 HTTP(S) 服务器上使用,则放将使用命令。 [...]
做一些实验
在监听模式下运行netcat(macOS版本):
nc -l localhost 8989
创建测试文件:
echo test>test
运行curl命令并在监听端检查结果:
% curl -d "name=test" localhost:8989
POST / HTTP/1.1
Host: localhost:8989
User-Agent: curl/7.84.0
Accept: */*
Content-Length: 9
Content-Type: application/x-www-form-urlencoded
name=test
% curl -T test localhost:8989
PUT /test HTTP/1.1
Host: localhost:8989
User-Agent: curl/7.84.0
Accept: */*
Content-Length: 5
Expect: 100-continue
test
为了回答您的问题,该-d
选项通过发送 x-www-form-urlencoded 格式的数据来发出 POST 请求,并-T
发送 PUT 请求而不格式化数据。