curl
一、简介
curl是一个命令行访问URL的工具,支持文件的上传和下载,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。可以用它构造http request报文,且可以解析服务器返回的http response,额外还支持cookie特性,可以用curl完成web浏览器的
基本功能,curl还支持HTTPS/FTP/FTPS/TELNET/LDAP等协议。
二、参数
参数 | 说明 |
不加参数 |
正常访问,返回html信息(get请求方式)
|
-I |
只显示http response 的头信息
|
-i |
输出时包括protocol头信息
|
-v |
输出通信的整个过程,多用于调试
|
--tarce |
也可用于调试,还会输出原始的二进制数据
|
-L |
会让http请求跟随服务的重定向(curl 默认不跟随重定向)
|
-s |
静默模式,不输出错误跟进度信息
|
-S |
只输出错误信息,通常与-s一起使用
|
-o |
将服务器的回应保存成文件到当前目录下,可加路径保存(相当于wget命令)
|
-O |
将服务器回应保存成文件,并将 URL 的最后部分当作文件名保存当前目录(加http/https,url要精确到某个文件)
|
-w |
用于在一次完整且成功的操作后输出指定格式的内容到标准输出,后接变量(后文列出变量)
|
示例 |
curl -o /dev/null -s -w %{http_code} www.nginx.com 直接获取 HTTP 状态码(可用于脚本判断网站是否正常) |
-d |
用于发送 POST 请求的数据体(即传送数据)
|
--data-urlencode |
等同于 -d 发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码
|
-u |
设置服务器认证的用户名和密码
|
-0 |
指定使用HTTP1.0访问,如:curl http://www.baidu.com/ -0 |
参数 |
说明 |
示例 |
-x |
指定proxy服务器以及其端口,不支持https |
curl -x 127.0.0.1:8080 http://www.baidu.com |
--resolve |
指定域名解析的ip,支持https,支持通配符* |
curl https://www.nginx.com --resolve 148.23.23.*:443 |
-X |
指定HTTP请求的方法(GET/POST/PUT/DELETE) |
curl -X POST https://www.baidu.com |
-A |
指定User-Agent |
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36" https://www.baidu.com |
-H |
指定请求头 |
curl -H "" https://www.baidu.com |
-k | 允许curl使用非安全的ssl连接并且传输数据(证书不受信) | |
-G | 构造URL的查询字符串,如省略,会发送post请求 | curl -G -d 'a=test' -d 'count=20' https://nginx.com/search 相当于访问:https://nginx.com/search?a=test&count=20 |
三、-w参数变量
参数 | 说明 |
url_effective |
最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形
|
http_code
|
http状态码
|
time_total
|
总时间,按秒计。精确到小数点后三位
|
time_namelookup
|
DNS解析时间,从请求开始到DNS解析完毕所用时间
|
time_connect
|
连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间
|
time_appconnect
|
连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间
|
time_pretransfer
|
从开始到准备传输的时间
|
time_redirect
|
重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间
|
time_starttransfer
|
开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
|
size_download
|
下载大小
|
size_upload
|
上传大小
|
size_request
|
请求的大小
|
speed_download
|
下载速度,单位-字节每秒
|
speed_upload
|
上传速度,单位-字节每秒
|
num_connects
|
最近的的一次传输中创建的连接数目
|
num_redirects
|
在请求中跳转的次数
|
ftp_entry_path
|
当连接到远程的ftp服务器时的初始路径
|
ssl_verify_result
|
ssl认证结果,返回0表示认证成功
|
四、
#测试网络 curl -Lo /dev/null -skw "time_connect: %{time_connect} s\ntime_namelookup: %{time_namelookup} s\ntime_pretransfer: %{time_pretransfer} s\ntime_starttransfer: %{time_starttransfer} s\ntime_redirect: %{time_redirect} s\nspeed_download: %{speed_download} B/s\ntime_total: %{time_total} s\n\n" http://url -d "{1:1}"
五、补充
5.1 url带引号
在url后面带参数的情况下使用curl,应用双引或单引将整个url引起来,否则url会被&符号隔开,导致报错
#错误格式 curl https://xxx.com?id=1&name=wang #正确格式 curl 'https://xxx.com?id=1&name=wang' curl "https://xxx.com?id=1&name=wang"