curl
1.1、curl简介

curl是一个用于网络传输的命令行工具和库。

curl支持的协议包括:FTPFTPSHTTPHTTPSGOPHERTELNETDICTFILELDAP

curl官网:https://curl.haxx.se

curl文档:https://curl.haxx.se/docs/httpscripting.html

1.2、通过包管理器安装curl
操作系统包管理器安装命令
Windowsscoopscoop install curl
WindowsChocolateychoco install -y curl
macOSHomeBrewbrew install curl
GNU/LinuxLinuxBrewbrew install curl
aptsudo apt-get install -y curl
CentOSyumsudo yum install -y curl
dnfsudo dnf install -y curl
openSUSEzyppersudo zypper install -y curl
Alpine Linuxapksudo apk add curl

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm curl
1.3、通过源码安装curl

1、安装依赖工具:curltarxzUtilsmakeGCC

2、使用curl下载源码包(下载地址):

curl -LO https://curl.haxx.se/download/curl-7.65.3.tar.xz

3、使用tar解压源码包:

tar Jvxf curl-7.65.3.tar.xz

4、进入curl-7.65.3目录,并查看它的内容:

5、编译并安装:

./configure && make && sudo make install
1.3、curl命令的用法

curl的使用格式:

curl [option]... [URL]...
1.3.1、--help

查看curl的简要帮助。

1.3.2、--manual

查看curl的完整的man手册。

当然,你也可以通过下面的命令查看完整的man手册:

man curl
1.3.3、默认访问

不带任何参数访问URL,会以GET方式请求。

示例:

curl http://www.baidu.com

运行效果如下:

curl默认将输出直接输出到屏幕,没有进行重定向,我们想要保存到文件,可以自己进行重定向。

示例:

curl http://www.baidu.com > index.html

curl对于HTMLXMLJSON等格式化文本的输出没有进行格式化, 所以看起来乱成一团,而且也没有进行高亮显示,所以,curl不适合用来进行接口调试,HTTPie更适合进行接口调试工作。

1.3.4、-v

-v参数表示输出更详细的日志。这对于问题排查和了解Http协议原理非常有用。

示例:

curl -v http://www.baidu.com

运行效果如下:

1.3.5、--trace <filePath>

--trace参数把请求过程日志保存到指定的文件中。

示例:

curl --trace trace.txt http://www.baidu.com
1.3.6、-o <filePath>

我们除了可以使用重定向外,还可以使用-o参数,保存到指定的文件名中去。

示例:

curl -o index.html http://www.baidu.com
1.3.7、-O

URL中包含文件名的时候,我们想要保存的文件名与URL的一样的时候, 这时候,我们使用-O参数即可。

示例:

curl -O https://modao.cc/uploads/avatars/33224/user-avatar.png
1.3.8、-L

默认情况下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的时候,不管有没有进行重定向,都加上此参数比较保险。

1.3.9、-C <offsetByte>

-C参数是断点续传功能。当取值为-的时候,curl自行判断从哪里开始续传。

断点续传功能对于大文件的下载和上传非常有用。

示例:

curl -L -C - -O https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
1.3.10、--limit-rate <bytePerSecond>

--limit-rate是进行限速的。

示例:

curl -L -C - -O --limit-rate 1000B https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.2.jar
1.3.11、--header <key: value>

--header或者-H进行设置请求头。要设置多个请求头,就使用多次。

要注意的是:很多的Http请求头是不允许用户自己设置的。要设置的请求头最好是自定义请求头。

示例:

curl -H "X-User-Agent: android:phone:4.4.4:1.0.0:hello" http://www.baidu.com
1.3.12、--user <serverUsername[:serverPassword]>

--user或者-u设置服务器的用户名和密码。

为了安全,最好不要直接写上密码,如果没有密码,会提示让用户输入。

示例(不安全):

curl -u "fpliu:123456" http://www.baidu.com

示例(安全):

curl -u "fpliu" http://www.baidu.com
1.3.13、--user-agent <string>

--user-agent或者-A设置User-Agent请求头。

示例:

curl -v -A "android:phone:4.4.4:1.0.0:hello" http://www.baidu.com

运行效果如下:

1.3.14、--head

--head指明以HEAD方式请求。

示例:

curl --head http://www.baidu.com

运行效果如下:

1.3.15、--request <method>

--request或者-X指明以哪种方式请求,默认请求方式是GET

这个参数不能指定HEAD,要以HEAD方式请求,请使用--head参数。

示例:

curl -X PUT http://www.baidu.com
1.3.16、--proxy [PROTOCOL://]<HOST>[:PORT]

--proxy或者-x设置代理。

只有使用了此参数才能被Charles等抓包工具抓包。

示例:

curl -x www.proxy.com http://www.baidu.com
curl --proxy 192.168.0.108:8888 http://www.baidu.com
1.3.17、--dump-header <filePath>

--dump-header或者-D将响应头保存到一个文件中, 通常我们想要保存Set-Cookie响应头中的内容。

示例:

curl -D cookies.txt http://www.baidu.com
1.3.18、--cookie <string/filePath>

--cookie或者-b进行设置Cookie请求头。

示例:

curl -b cookies.txt http://www.baidu.com
1.3.19、--data <string>

--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
1.3.20、--form <content>

--form或者-F表示以Multi-part方式上传数据。 这个参数可以使用多次。

示例:

curl -F "id=1&name=fpliu" -F "img=@avatar.png" http://www.baidu.com
1.3.21、--retry <num>

--retry设置重试次数。

示例:

curl --retry 3 http://www.baidu.com
1.3.22、--silent

--silent或者-s表示没有进度条或者错误输出,但是请求内容依然是输出的。

示例:

curl -s http://www.baidu.com
1.3.23、--show-error

--show-error或者-S表示只输出错误,通常与--silent一起使用。

示例:

curl -sS http://www.baidu.com
1.3.24、--upload-file <filePath>

--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
1.3.24、--time-cond <date expression>

--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日之后没有进行过更新,才进行下载。

1.3.25、--config <configFilePath>

--config或者-K,表示从指定的配置文件中读取参数, 默认的配置文件是~/.curlrc