curl(Client for URLs,发音为 'see URL'),一个网络命令行工具, 支持许多协议(DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS, POP3,POP3S,RTMP,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET 和 TFTP), 本篇只针对 HTTP 协议。
curl 可以制作 http 请求,获取 http 响应。 一个 http 请求由 request method(GET、POST、HEAD、PUT、DELETE等)、request headers 和 request body 组成, 一个 http 响应由 status line、response headers 和 response body 组成。
example
获取一个网页:
curl http://example.com/
也可以给网址添加 query string:
curl www.baidu.com/s?wd=abc
同时获取两个网页:
curl http://example1.com/ http://example2.com/
如果你进行 web 调试或者想看一下 curl 和 服务器之间的交互情况,通常可以利用 -v 或 --verbose 参数:
curl -v http://example.com/
有时 -v 还不能满足你的要求,你可以用 --trace 或 --trace-ascii 参数:
curl --trace output.txt http://example.com/
如果你还想查看 http 在传输过程中所用的时间可以添加 --trace-time 参数:
curl --trace-ascii d.txt --trace-time http://example.com/
curl 命令通常将结果输出到标准输出,如果想要结果重定向某文件,可以使用 -o 或 --output 参数:
curl -o filename http://example.com/
也可以用 -O 或 --remote-name 参数使输出文件名与远程文件一样:
curl -O filename http://example.com/
仅获取 headers,可以利用 -I 或 --head 参数:
curl -I www.baidu.com
自动进行重定向可以利用 -L 或 --location 参数:
curl -L http://redirect.test.com
指定 http 请求方法:GET、POST、PUT、DELETE等
curl -X POST http://example.com/
添加或删除 http 请求某头信息可以利用 -H 或 --header 参数:
curl -H "Accept:" http://example.com/
curl -H "Accept: application/json" -H "Authorization: OAuth 2c3455d1aeffc" http://example.com/
利用参数 -d 或 --data 发送 POST 请求包体:
curl -d "firstname=abc" -d "lastname=def" http://example.com/
上面发送的消息头里还有 Content-Type: application/x-www-form-urlencoded,
而 request body 为 firstname=abc&lastname=def。
当然,你也可以想下面这样:
curl -d "firstname=abc&lastname=def" http://example.com/
-d 参数发送的数据必须是已经转义后的格式,比如空格是 %20,如果要 curl 帮你转义,可以利用 --data-urlencode 参数:
curl --data "birthyear=1905&press=%20OK%20" http://example.com
curl --data-urlencode "birthyear=1905&press= OK " http://example.com
当参数 -d 或 --data 去 POST 多个 url 时,POST 会发送相同的数据到那些 url:
curl --data name=curl http://example1.com/ http://example2.com/
如果要避免同时发送数据,可以利用 -: 或 --next 参数,下面是先发送一个 POST 请求,然后在发送一个 GET 请求:
curl -d name=curl http://example1.com/ --next http://example2.com/
POST 时,当 enctype='multipart/form-data' 时,可以利用 -F 或 --form 参数:
curl -F upload=@filename -F press=OK http://example.com
可以利用 -T 或 --upload-file 来 PUT 一个文件:
curl -T uploadfile http://abc.test.com