curl
命令的使用格式:
curl [option]... [URL]...
查看curl
的简要帮助。
查看curl
的完整的man手册。
当然,你也可以通过下面的命令查看完整的man手册:
man curl
不带任何参数访问URL
,会以GET
方式请求。
示例:
curl http://www.baidu.com
运行效果如下:
curl
默认将输出直接输出到屏幕,没有进行重定向,我们想要保存到文件,可以自己进行重定向。
示例:
curl http://www.baidu.com > index.html
curl
对于HTML
、XML
、JSON
等格式化文本的输出没有进行格式化, 所以看起来乱成一团,而且也没有进行高亮显示,所以,curl
不适合用来进行接口调试,HTTPie更适合进行接口调试工作。
-v
参数表示输出更详细的日志。这对于问题排查和了解Http协议原理非常有用。
示例:
curl -v http://www.baidu.com
运行效果如下:
--trace
参数把请求过程日志保存到指定的文件中。
示例:
curl --trace trace.txt http://www.baidu.com
我们除了可以使用重定向外,还可以使用-o
参数,保存到指定的文件名中去。
示例:
curl -o index.html http://www.baidu.com
当URL
中包含文件名的时候,我们想要保存的文件名与URL
的一样的时候, 这时候,我们使用-O
参数即可。
示例:
curl -O https://modao.cc/uploads/avatars/33224/user-avatar.png
默认情况下curl
不会处理重定向,加上-L
参数,curl
才会处理重定向请求, 要特别注意的一点。
我们看一下下面的下载过程:
curl -O https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
我们发现下载很快,但是生成的文件确是个空文件。我们使用-v
参数再看看:
我们发现https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
这个URL
重定向到了别处去了。
我们加上-L
参数就正常的了。所以,我们在使用curl
的时候,不管有没有进行重定向,都加上此参数比较保险。
-C
参数是断点续传功能。当取值为-
的时候,curl
自行判断从哪里开始续传。
断点续传功能对于大文件的下载和上传非常有用。
示例:
curl -L -C - -O https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
--limit-rate
是进行限速的。
示例:
curl -L -C - -O --limit-rate 1000B https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
--header
或者-H
进行设置请求头。要设置多个请求头,就使用多次。
要注意的是:很多的Http
请求头是不允许用户自己设置的。要设置的请求头最好是自定义请求头。
示例:
curl -H "X-User-Agent: android:phone:4.4.4:1.0.0:hello" http://www.baidu.com
--user
或者-u
设置服务器的用户名和密码。
为了安全,最好不要直接写上密码,如果没有密码,会提示让用户输入。
示例(不安全):
curl -u "fpliu:123456" http://www.baidu.com
示例(安全):
curl -u "fpliu" http://www.baidu.com
--user-agent
或者-A
设置User-Agent
请求头。
示例:
curl -v -A "android:phone:4.4.4:1.0.0:hello" http://www.baidu.com
运行效果如下:
--head
指明以HEAD
方式请求。
示例:
curl --head http://www.baidu.com
运行效果如下:
--request
或者-X
指明以哪种方式请求,默认请求方式是GET
。
这个参数不能指定HEAD
,要以HEAD
方式请求,请使用--head
参数。
示例:
curl -X PUT http://www.baidu.com
--proxy
或者-x
设置代理。
只有使用了此参数才能被Charles等抓包工具抓包。
示例:
curl -x www.proxy.com http://www.baidu.com
curl --proxy 192.168.0.108:8888 http://www.baidu.com
--dump-header
或者-D
将响应头保存到一个文件中, 通常我们想要保存Set-Cookie
响应头中的内容。
示例:
curl -D cookies.txt http://www.baidu.com
--cookie
或者-b
进行设置Cookie
请求头。
示例:
curl -b cookies.txt http://www.baidu.com
--data
或者-d
设置请求体, 当出现此参数,默认请求就改为了POST
请求。并且Content-Type
请求头被设置成了application/x-www-form-urlencoded
。
示例:
curl -d "id=1&name=fpliu" http://www.baidu.com
如果您要传入JSON
格式的数据,或者XML
格式的数据, 您还需要自己设置Content-Type
请求头。
示例:
curl -d "{'id':1,'name':'fpliu'}" -H "Content-Type: application/json;utf-8" http://www.baidu.com
--form
或者-F
表示以Multi-part
方式上传数据。 这个参数可以使用多次。
示例:
curl -F "id=1&name=fpliu" -F "img=@avatar.png" http://www.baidu.com
--retry
设置重试次数。
示例:
curl --retry 3 http://www.baidu.com
--silent
或者-s
表示没有进度条或者错误输出,但是请求内容依然是输出的。
示例:
curl -s http://www.baidu.com
--show-error
或者-S
表示只输出错误,通常与--silent
一起使用。
示例:
curl -sS http://www.baidu.com
--upload-file
或者-T
表示上传指定的文件。
示例1(上传指定文件):
curl -T avatar.png http://www.baidu.com
示例2(上传多个文件):
curl -T "{avatar.png,idcard.png}" http://www.baidu.com
示例3(上传文件名规律的一系列文件):
curl -T "img[0-100].png" http://www.baidu.com
示例4(从标准输入设备输入要上传的内容):
curl -T - http://www.baidu.com
--time-cond
或者-z
表示超过指定日期就不下载了。
日期的格式:日-月-年
示例1:
curl -z 21-Dec-16 http://www.baidu.com
只有在2016年12月21日之后更新过,才进行下载。
示例2:
curl -z -21-Dec-16 http://www.baidu.com
只有在2016年12月21日之后没有进行过更新,才进行下载。
--config
或者-K
,表示从指定的配置文件中读取参数, 默认的配置文件是~/.curlrc
。