“curl -XPUT --data-binary @${file_path}”和“curl -XPUT -T ${file_path}”之间的区别?

“curl -XPUT --data-binary @${file_path}”和“curl -XPUT -T ${file_path}”之间的区别?

当使用curl将文件POST或PUT到url时,有两种不同的方式来加载文件内容:

  1. -T ${file_path}
  2. --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 请求而不格式化数据。

相关内容