发出POST请求的cURL命令行语法是什么?


Answers:


2542

带有字段:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

使用分别指定的字段:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

多部分:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

多部分字段和文件名:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

没有数据:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

有关更多信息,请参见cURL手册有关模拟Web浏览器cURL教程很有帮助。

对于libcurl,curl_formadd()在以通常的方式提交表单之前,使用该函数来构建表单。有关更多信息,请参见libcurl文档

对于大文件,请考虑添加参数以显示上传进度:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o output是必需的,否则没有进度条就会出现。


7
@LauriRanta --data-urlencode(无破折号),至少在最新版本中
waitinforatrain 2013年

4
如果您需要使用PUT更新资源,也可以使用:curl -X PUT ...
Subfuzion 2014年

3
我无法理解...什么时候With Fields,何时使用Multipart,何时使用Without Data
CodyBugstein 2014年

7
代替--data您可以使用-d
user35538​​ 2015年

我有一个领域的数组。我怎样才能做到这一点?
ARUNBALAN NV

507

对于包含XML的RESTful HTTP POST:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

或对于JSON,请使用以下命令:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

这将读取命名文件的内容,filename.txt并将其作为发布请求发送。


13
@ tom-wijsman解释:curl -X POST暗示一个HTTP POST请求,-d参数(长版本:)--data告诉curl 其后将是POST参数,并将@filename文件的内容指定filename为参数。这种方法与Twitter,Facebook,包括Ruby on Rails的各种其他Web服务以及数据库(如CouchDB)的HTTP API一起使用的RESTful HTTP API效果最佳。REST代表代表性状态转移
soundmonster 2012年

1
我们如何才能看到响应xml不在一行中而是已格式化?
Vitaly Zdanevich '16

6
我认为您可以省略,-X POST因为暗示-d
benjifisher

如何给多个标题?
keya '17

多个头:卷曲-H “标题2:1” -H “标题2:2” ...
托马什Kratochvíla



61

如果要登录到站点,请执行以下操作:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

第一个请求将会话cookie(成功登录后提供)保存在“标头”文件中。从现在开始,您可以使用该cookie对通过浏览器登录后通常访问的网站的任何部分进行身份验证。


6
curl的手册页上的一条注释:“但是-c,--cookie-jar选项是存储cookie的更好方法。”
maxschlepzig 2013年


27

如果您很懒惰,可以让google-chrome为您完成所有工作。

  1. 右键单击要提交的表单,然后选择检查。这将打开DevTools面板。
  2. 在devtools中选择Network选项卡,然后勾选 Preserve log复选框。
  3. 提交表单并使用POST方法找到条目(右键单击任何列标题并确保选中Method)。
  4. 右键单击带有POST的行,然后选择复制 > 复制为cURL

chrome devtools:复制为cURL

Chrome会使用cURL语法复制所有请求数据。

Chrome使用--data 'param1=hello&param2=world'它可以通过使用单一作更可读的-d-F根据每个参数对哪种类型的POST请求的要发送,其可以是application/x-www-form-urlencodedmultipart/form-data相应。

这将被发布为application/x-www-form-urlencoded用于大多数不包含文件上传的表单):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

对于multipart/form-dataPOST使用-F通常用于包含文件上传的表单,或者其中字段顺序很重要,或者需要多个具有相同名称的字段):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-Agent头通常不需要,但我万一丢进去。您可以通过创建~/.curlrc包含以下内容的文件来避免必须为每个请求设置用户代理User-Agent: "Mozilla/2.2"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.