curl <https://baidu.com>1.1 自定义header

添加header利用 -H, --header

curl -H "X-MY-HEADER: abc" <https://baidu.com>

如果想添加多个header,那么就写多次

curl -H "X-MY-HEADER: abc" -H "X-MY-HEADER2: def" <https://baidu.com>1.2 要求方法

有些时候想要post或者put要求,可以利用 -X, --request <method> 来自设置

phppost跳转一文懂得curl常用及特别用法 SQL

curl -X POST <https://baidu.com>

当post的时候想要传输body参数,可以利用 -d, --data <data> 来设置

curl -X POST -d "name=abc&gender=0" <https://example.com>或者curl -X POST -d name=bac -d gender=0 <https://example.com>1.3 设置cookie

须要添加cookie来要求,可以利用 -b, --cookie 来设置

curl -b "token=abcdef;uid=123123" <https://example.com>

那如果想要把返回的cookie存储起来呢,可以用 -c, --cookie-jar <file> 来设置存储的位置

curl -c cookie.txt <https://www.baidu.com>1.4 结果输出到文件

须要把要求的返回结果输出到文件,以便查看剖析,可以用 -o, --output <file> 来设置输出到的文件

curl -o baidu.html <https://www.baidu.com>

示例如下图,会打印出整体进度和统计

二、多种协议

curl被人熟知的是系统自带的用来要求HTTP url的工具。
但是,其不但可以处理http协议,还可以处理:FILE, FTP, FTPS, GOPHER, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP等。


这么多协议,若何,功能是不是很强大。

用来发送邮件

curl --mail-from "abc@def.com" --mail-rcpt "12345566@qq.com" --upload-file mail.txt --user "user_name:password" --url "smtp://mail.qq.com"上传文件,利用 -T, --upload-file <file> 参数,同时可以批量上传, 用[] 来设置范围,示例如下。
同时,下面会讲解如何处理多个url同时要求的情形。

curl -T "img[1-1000].png" <ftp://ftp.example.com/upload/>或者curl --upload-file "{file1,file2}" <http://www.example.com>三、多个要求

最大略的利用办法是:curl <https://baidu.com> ,但是偶尔会有想同时要求多个url,能不能办的到呢,当然可以

curl https://{baidu,cnblogs}.com

这样的话就会顺序要求 https://baidu.com、https://cnblogs.com 这两个网站。
(PS: 终端里显示{ 或}之前有\,是终端做的转义功能,请忽略。

又有说要求的url不一定都是.com结尾呢,能不能办呢,那必须可以

curl https://{baidu.com,csdn.net}

又有人较真说,我要求的多个url协议都是不同的,比如:curl {<http://baidu.com>, <https://csdn.net>} , 能不能这么要求呢,那不好意思,这样弗成,会解析缺点。

这种用法多用于某个站点多种path或query的情形,比如

四、利用代理

可以利用 -x,--proxy [protocol://]host[:port] 参数 代理来要求目标网站

curl --proxy <http://127.0.0.1:1087> <https://baidu.com>

利用http的代理是可以来要求https目标网站的,个中事理是利用了http的proxy tunnel功能,这个在后续文章中会做详细先容。

五、要求详情

有些时候想要知道详细的要求情形,比如怎么建立连接的,要求过程是如何的,那么可以这么来用,利用 -v ,--verbose

curl -v <https://baidu.com>

六、要求追踪

有了上面的详细要求可能还不太知足一些需求,比如想要知道花费建立连接韶光、传输韶光、相应韶光等详细的性能信息,这个对付终极网络问题很有帮助,那么怎么办呢。

那就要拿出一个厉害的参数:-w, —write-out

比如下面的例子可以输出:发起链接韶光,开始传输韶光以及总花费韶光。

curl -w 'time_connect %{time_connect}s\\ntime_starttransfer %{time_starttransfer}s\\ntime_total %{time_total}s\\n' <https://baidu.com>

可以来一个更详细的追踪

curl -w 'http_code: %{http_code}\\ncontent_type: %{content_type}\\ntime_namelookup: %{time_namelookup}\\ntime_connect: %{time_connect}\\ntime_appconnect: %{time_appconnect}\\ntime_redirect: %{time_redirect}\\ntime_pretransfer: %{time_pretransfer}\\ntime_starttransfer: %{time_starttransfer}\\nspeed_download: %{speed_download}\\nspeed_upload: %{speed_upload}\\nsize_download: %{size_download}\\nsize_upload: %{size_upload}\\n---------\\n time_total: %{time_total}\\n' <https://baidu.com>

结果如下图

-w 可以利用的变量比较多,常用的如下表所示:

url_effective 上次访问的URLhttp_code 上一次 HTTP 或 FTP 数据传输过程中的 response 数值代码http_connect 上一次 CONNECT 要求中的数值代码time_total 数据传输花费的总韶光,以秒为单位,精度为毫秒。
time_namelookup 从数据传输开始到域名解析完成所花费的韶光。
以秒为单位time_connect TCP连接建立成功所花费的韶光。
以秒为单位time_appconnect 运用层协议,如 SSL/SSH、三次握手等过程完成所花费的韶光。
以秒为单位time_redirect 从跳转链接被激活到真正开始从跳转链接下载数据所经由的韶光。
以秒为单位time_starttransfer 从要求连接开始,到第一个字节被传送前所经由的韶光。
以秒为单位size_download 数据传输过程中下载的总数据大小。
以字节为单位size_upload 数据传输过程中上传的总数据大小。
以字节为单位size_header 下载的数据包中,header 字段的总数据大小。
以字节为单位size_request 被发送的 HTTP request 的总数据大小。
以字节为单位speed_download 全体数据传输过程中的均匀数据下载速率。
以字节为单位speed_upload 全体数据传输过程中的均匀数据上传速率。
以字节为单位content_type 被要求访问的文件的 Content_Type 类型。
num_redirects 访问要求中包含的跳转链接数量。
redirect_url 跳转链接指向的URL ssl_verify_result SSL验证的结果。
值为 0 时表示验证成功。
七、设置重试

可以设置失落败要求重试次数,以及最大重试次数、超时时间等。

—retry <num> 设置重试次数—retry-delay <seconds> 设置重试时等待韶光,秒级—retry-max-time <seconds> 设置最大重试韶光-m, —max-time <seconds> 设置最大要求韶光,即超时时间

例如,设置重复次数要求一个不存在的url

curl --retry 3 --retry-delay 1 --retry-max-time 10 <https://notexisturl.com>

例如,设置超时时间来要求

curl -m 1 <https://baidu.com>