【发布时间】:2008-09-17 15:39:01
【问题描述】:
【问题讨论】:
【问题讨论】:
带字段:
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
有关详细信息,请参阅the cURL manual。 cURL tutorial on emulating a web browser 很有帮助。
使用libcurl,使用curl_formadd() 函数在以通常方式提交之前构建您的表单。请参阅libcurl documentation 了解更多信息。
对于大文件,考虑添加参数以显示上传进度:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
-o output是必填项,否则不会出现进度条。
【讨论】:
--data-urlencode(没有破折号),至少在最近的版本中
With Fields,什么时候做Multipart,什么时候做Without Data?
--data代替-d。
对于包含 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 的文件的内容并将其作为发布请求发送。
【讨论】:
curl -X POST 表示 HTTP POST 请求,-d 参数(长版本:--data)告诉 curl 后面的将是 POST 参数,@filename将文件filename 的内容指定为参数。这种方法最适用于 RESTful HTTP API,如 Twitter、Facebook、包括 Ruby on Rails 在内的各种其他 Web 服务以及 CouchDB 等数据库的 HTTP API。 REST 代表Representational state transfer
-X POST,因为-d 暗示了这一点。
来自标准输入的数据,-d @-
例子:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
输出:
<p>Hello <strong>world</strong>!</p>
【讨论】:
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
是在Curl Example Manual 中找到的示例。
如果上述方法不起作用,请使用 %26 作为 & 符号:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
【讨论】:
如果您想登录网站,请执行以下操作:
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
第一个请求将会话 cookie(在成功登录时提供)保存在“headers”文件中。从现在开始,您可以使用该 cookie 对您在使用浏览器登录后通常访问的网站的任何部分进行身份验证。
【讨论】:
如果你懒惰,你可以让 google-chrome 或 firefox 为你完成所有工作。
Chrome 将以 cURL 语法复制所有请求数据。
Chrome 使用 --data 'param1=hello&param2=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(通常用于包含文件上传的表单,或者字段顺序很重要,或者需要多个同名字段的情况):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
User-Agent 标头通常不需要,但我已将其丢弃以防万一。如果您需要自定义代理,那么您可以通过创建包含例如User-Agent: "Mozilla/2.2"
【讨论】:
curl -v --data-ascii var=value http://example.com
还有更多选项,请查看curl --help 了解更多信息。
【讨论】: