CURL指南

371 阅读3分钟

简介

大多数开发者都使用过CURL,但对它庞大的功能知之甚少,它支持的参数多达数五十多个,而且还在不断的增加

它的功能非常强大,熟练的话,完全可以满足我们日常大部分需求

常用参数

以下内容主要介绍它的常用参数

主要内容来自

《curl cookbook》

阮一峰老师的CURL用法指南

命令手册介绍,使用命令curl --manual就可以查看它的全部介绍

GET请求

GET请求相关的参数如下

参数描述例子
-G将-d参数的内容改为GET参数curl -G -d 'q=kitties' -d 'count=20' google.com/search
实际请求URL为google.com/search?q=ki…
--data-urlencode主要用于处理GET参数中包含空格的情况--data-urlencode 'comment=hello world'

POST请求

参数描述例子
-dpost 数据curl -d'login=emma&password=123'-X POST google.com/login
或者 curl -d 'login=emma' -d 'password=123' -X POST google.com/login
-d @file读取文件内容作为post内容curl -d '@data.txt' google.com/login
这样就直接读取data.txt内容向服务器发送
--data-urlencode会对post内容进行urlencodecurl --data-urlencode 'comment=hello world' google.com/login
-F向服务器上传二进制文件,并且设置上传类型和文件名curl -F 'file=@photo.png;type=image/png;filename=me.png' google.com/profile
上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream
filename 指定服务器收到的文件名

设置header相关参数

参数描述例子
-A设置user-agentcurl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 SaHari/537.36' google.com
-H指定对应的header,可以多个-H连写curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' google.com
-b设置cookie,可以多个-b连写curl -b 'foo=bar' google.com 向服务器发送一个名为foo,值为bar的cookie
-b file设置cookie文件curl -b cookies.txt www.google.com
-e设置referercurl -e 'google.com?q=example' www.example.com
-u账号密码授权curl -u 'bob:12345' google.com/login

引导设置

参数描述例子
-X指定请求方式,GET,POST,HEAD,PUT等curl -X POST www.example.com
-L允许重定向,默认CURL是不跟随重定向的curl -L catonmat.net
-x设置代理curl -x socks5://james:cats@myproxy.com:8080 catonmat.net
-k跳过HTTPS校验,不检查证书是否正确curl -k www.example.com
--resolve HOST:PORT:ADDRESS强制解析HOST到对应的IP:PORT,非常好用,可以配合通配符使用curl datapixxxx.cn/ --resolve *:443:1.1.1.1
-K 或 --config FILE指定配置文件,里面的内容按 每个参数一行进行设置curl -K config.txt www.example.com

获取内容

参数描述例子
-c file将服务器发送的cookie保存到对应的文件curl -c cookies.txt www.google.com
-o file将服务器响应保存到文件curl -o example.html www.example.com
-v打印整个请求过程,用于调试curl -v www.example.com
-i打印服务器响应的headercurl -i www.example.com
-# 或者 --progress-bar显示进度条curl -# -i www.example.com

调试打印

如果本地无法连接服务器,或响应很慢,我们肯定想知道是中间哪个环节出了问题

这时候就需要使用-w参数,打印一些请求过程的参数,方便我们排查问题

其中比较常用的参数如下

参数描述
time_connect建立TCP连接花费的时间
time_namelookupDNS查询花费的时间
time_total全部完成花费时间
remote_ip服务器IP
remote_port服务器端口
time_redirect重定向花费时间,包括重定向的DNS查询到完成响应的时间

下面是一个简单的例子

curl  https://www.example.com -w 'TCP连接时间:%{time_connect}\nDNS时间:%{time_namelookup}\n全部时间:%{time_total}\n服务器IP:%{remote_ip}\n'

响应如下:

TCP连接时间:1.154614
DNS时间:0.000895
全部时间:2.381030
服务器IP:93.184.216.34