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 请求的数据体(即传送数据)

curl -d'login=emma&password=123'-X POST https://google.com/

使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded

 

 

-d参数可以读取本地文本文件的数据,向服务器发送

curl -d '@test.txt' https://google.com/

上面命令读取test.txt文件的内容,作为数据体向服务器发送

--data-urlencode

等同于 -d 发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码

curl --data-urlencode 'comment=hello world' https://google.com/

 

 -u

设置服务器认证的用户名和密码

curl -u 'test:123456' https://www.baidu.com/

-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"

 

posted @ 2022-05-07 10:21  心恩惠动  阅读(387)  评论(0编辑  收藏  举报