#1 楼
带有字段:curl --data "param1=value1¶m2=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
是必需的,否则将不会显示进度条。#2 楼
对于包含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
的文件的内容,并将其作为发布请求发送。评论
@ 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年6月27日上午11:27
我们如何才能看到响应xml不在一行中而是已格式化?
– Vitaly Zdanevich
16年7月29日在13:12
我认为您可以不使用-X POST,因为-d隐含了这一点。
– Benjifisher
16年11月30日在19:02
如何给多个标题?
– keya
17年5月29日在11:37
多个标题:curl -H“ header2:1” -H“ header2:2” ...
–TomášKratochvíla
2017年9月8日14:57在
#3 楼
来自带有-d @-
的stdin的数据示例:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
输出:
<p>Hello <strong>world</strong>!</p>
评论
如果剪贴板中已有JSON对象,那就太好了
–卢卡·斯蒂布(Luca Steeb)
16年5月29日在16:12
更好:echo“ $ message” | curl -H“内容类型:应用程序/ json” -d @-“ $ url”
– rzr
17年11月8日在18:43
#4 楼
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
是《卷曲示例手册》中的示例。
使用%26作为“&”号,尽管如果以上操作无效:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
#5 楼
如果要登录到站点,请执行以下操作:curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
第一个请求将会话cookie(成功登录时提供)保存在“标题”中文件。从现在开始,您可以使用该cookie对通过浏览器登录后通常访问的网站的任何部分进行身份验证。
评论
curl的手册页上的一条注释:“但是-c,--cookie-jar选项是存储cookie的更好方法。”
–maxschlepzig
2013年12月28日15:14
#6 楼
如果您很懒,可以让google-chrome或firefox为您完成所有工作。右键单击要提交的表单,然后选择“检查”(对于Firefox,则选择“检查元素”)。这将打开DevTools面板。
在devtools中选择Network选项卡,然后选中Preserve log复选框(firefox的Persist Logs)。
提交表单并使用POST方法找到条目(右键单击任何列标题,并确保已选中“方法”。
右键单击带有POST的行,然后选择“复制”>“复制为cURL”。
Chrome会将所有请求数据复制到cURL语法。
Chrome使用
--data 'param1=hello¶m2=world'
,您可以通过每个参数使用单个-d
或-F
来提高可读性,具体取决于您要发送的POST请求类型,可以是application/x-www-form-urlencoded
或multipart/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-data
POST,请使用-F
(通常用于包含文件上传的表单,或者字段顺序很重要的地方,或者多个字段wi需要相同的名称): 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"
#7 楼
curl -v --data-ascii var=value http://example.com
还有更多选项,请检查
curl --help
以获取更多信息。
评论
@LauriRanta --data-urlencode(无破折号),至少在最新版本中
–waitinforatrain
13年2月12日在12:34
如果您需要使用PUT更新资源,也可以使用:curl -X PUT ...
– Subfuzion
2014年1月22日下午4:38
我无法理解...什么时候使用字段,何时使用Multipart和何时不使用数据?
–科迪·布格斯坦(CodyBugstein)
2014年9月21日上午11:05
可以使用-d代替--data。
–user35538
2015年10月9日在16:32
我有一个领域的数组。我怎样才能做到这一点?
– ARUNBALAN NV
16 Mar 9 '16 at 13:13