Fu
Simple is Beautiful!

linux command之curl

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 请求方法:GETPOSTPUTDELETE

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
linux31CLI17
2014-05-29 21:52:08