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> 来自设置
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>