如何使用Curl?
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。如果操作熟练, 完全可以取代部分图形浏览器的功能。不带有任何参数时,curl 就是发出 GET 请求:
curl https://www.typeboom.com/
上面命令向www.typeboom.com
发出 GET 请求,服务器返回的内容会在命令行输出。
-A参数
-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]
。
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://www.typeboom.com/
上方的命令以Chrome浏览器为User-Agent向www.typeboom.com
发送了GET请求。
curl -A '' https://www.typeboom.com/
上方的命令以无User-Agent的方式向www.typeboom.com
发送了GET请求。(大多数网站所使用的CDN的内置WAF会屏蔽)
curl -H 'User-Agent: php/1.0' https://www.typeboom.com/
上方的命令使用了-H
参数直接指定标头,更改了User-Agent并向www.typeboom.com
发送了GET请求。
-b参数
使用-b参数向服务器发送 Cookie。
curl -b 'foo=bar' https://www.typeboom.com/
上方的命令会生成一个标头Cookie: foo=bar
,向服务器发送一个名为foo、值为bar的 Cookie。
curl -b 'foo1=bar;foo2=bar2' https://www.typeboom.com/
上方的命令向服务器发送了Cookie: foo=bar
和Cookie: foo2=bar2
两个Cookie。
curl -b cookies.txt https://www.typeboom.com/
上方的命令读取并向服务器发送了Cookie.txt
中的Cookie。
-c参数
使用-c参数将服务器返回的Cookie保存至某个文件。
curl -c cookies.txt https://www.typeboom.com/
上方的命令将服务器返回的Cookie保存至了Cookie.txt
文件中。
-d参数
使用-d参数向服务器发送POST请求的数据体。
curl -d'login=admin&password=123'-X POST https://www.typeboom.com/admin/
# 或者
curl -d 'login=admin' -d 'password=123' -X POST https://www.typeboom.com/admin/
上方的命令向服务器发送(POST)了login=admin&password=123
。但是使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded
。并且会自动将请求转为 POST 方法,因此可以省略-X POST
。
和发送Cookie类似,-d参数同样可以读取本地文本文件的数据,向服务器发送。
curl -d '@data.txt' https://www.typeboom.com/
上方的命令向服务器发送(POST)了data.txt
文件中的数据。
--data-urlencode参数
--data-urlencode参数相当于-d参数,但是会自动对发送的内容进行URL(统一资源定位器)编码。
curl --data-urlencode 'comment=Cross the Great Wall and go to the world' https://www.typeboom.com/
上方的命令中,要向服务器发送的命令存在无法直接读取的空格,需要被URL编码。
-e参数
-e参数用来设置 HTTP 的标头Referer
,表示请求的来源。
curl -e 'https://ArtemisNet.net/' https://www.typeboom.com/
上方的命令设置 HTTP 的标头为https://ArtemisNet.net/
,向服务器发送了GET请求。
这在某些启用了防盗链(HotLink保护)且禁止以空Referer的方式的服务器上很管用。
-H参数
-H参数可以通过直接添加标头Referer,达到同样效果。
curl -H 'Referer: https://ArtemisNet.net/' https://www.typeboom.com/
上方的命令使用-H参数设置Referer
为https://ArtemisNet.net/
向服务器发送了GET请求。
-F参数
-F参数用于向服务器发送二进制文件。
curl -F 'file=@photo.webp' https://www.typeboom.com/
上方的命令会给HTTP请求加上标头Content-Type: multipart/form-data
并将文件photo.webp
作为file
字段发送(POST)至了服务器。
-F参数同样也可以指定MINE类型:
curl -F 'file=@photo.webp;type=image/png' https://www.typeboom.com/
上方的命令指定 MIME 类型为image/png
,否则 curl 会把 MIME 类型设为application/octet-stream
。
-F参数同样也可以指定文件名。
curl -F 'file=@photo.webp;filename=cat.webp' https://www.typeboom.com/
上方的命令将文件photo.webp发送(POST)至了服务器,但是服务器收到的文件的名称为cat.webp。
-G参数
-G参数用于构造URL(统一资源定位器)的查询字符串。
curl -G -d 'Workers' https://www.typeboom.com
上方的命令向服务器发送了一个GET请求,请求的URL为:https://www.typeboom.com?=Workers
如有数据需要URL编码,可以结合--data--urlencode参数。-H参数可以添加HTTP请求标头。
curl -H 'Accept-Language: zh-CN' https://www.typeboom.com/
上方的命令添加了HTTP请求标头:Accept-Language: zh-CN并向服务器发送了GET请求。
curl -H 'Accept-Language: zh-CN' -H 'Secret-Message: FUNCDN-sucks' https://www.typeboom.com/
上方的命令添加了两个HTTP请求标头:Accept-Language: zh-CN
和Secret-Message: FUNCDN-sucks
并向服务器发送了GET请求。
curl -d '{"login": "admin", "pass": "123"}' -H 'Content-Type: application/json' https://www.typeboom.com/admin
上方的命令添加了HTTP请求标头:Content-Type:application/json
并使用-d参数向服务器发送(POST)了json
数据。
-i参数
-i参数将打印出服务器回应的HTTP标头。
curl -i https://www.typeboom.com/
上方的命令将会在终端打印出服务器回应的HTTP标头后,换行再打印出服务器返回的网页源码。
-I参数
-I参数将向服务器发送HEAD请求并打印出服务器回应的HTTP标头。
curl -I https://www.typeboom.com/
上方的命令将会在终端打印出服务器对HEAD请求的回应。
--head参数
--head参数等同于-I参数。
curl --head https://www.typeboom.com/
上方的命令同样将会在终端打印出服务器对HEAD请求的回应。
-k参数
-k参数将会禁用SSL证书校验。
curl -k https://www.typeboom.com/
上方的命令向服务器发送了GET请求,但不检查SSL证书的有效性。
-L参数
-L参数将允许所发出的HTTP请求跟随服务器的重定向,如果不设置此参数,CURL将默认不跟随重定向。
curl -L https://www.typeboom.com/
上方的命令向服务器发送了GET请求,但允许跟随服务器的重定向。
--limit-rate参数
--limit-rate参数将限制HTTP请求和回应的带宽。
curl --limit-rate 500k https://www.typeboom.com/
上方的命令向服务器发送了GET请求且限制其所使用的带宽速度为每秒500千字节(KiB)。
-o参数
-o参数将服务器的回应保存为文件,约等于wget
命令。
curl -o speedtest-12.7m.png https://img.typeboom.com/pic/speedtest-12.7m.png
上方的命令向服务器发送了GET请求,并将服务器的回应保存为speedtest-12.7m.png
。
-O参数
-O参数将服务器的回应保存为文件,并将URL(统一资源定位器)中的最后一部分作为文件名。
curl -O https://img.typeboom.com/pic/speedtest-12.7m.png
上方的命令向服务器发送了GET请求,并将服务器的回应保存为speedtest-12.7m.png
。
-s参数
-s参数将不输出错误和进度信息。
curl -s https://www.typeboom.com/
上方的命令向服务器发送了GET请求,如果不发生错误,将仅输出正常的运行结果。
结合-o /dev/null
参数,可使CURL不输出任何信息,此参数的意思为:“将文件写入/dev/null
”,/dev/null
在类Unix系统中是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功)。
curl -s -o /dev/null https://www.typeboom.com/
上方的命令向服务器发送了GET请求,但不会输出任何信息。
-u参数
-u参数可以设置服务器认证的用户名以及密码。
curl -u "bob:12345" https://www.typeboom.com/admin
上方的命令设置用户名为bob
,密码为12345
,然后将其转为HTTP标头Authorization: Basic Ym9iOjEyMzQ1
。
-v参数
-v参数将会输出CURL与服务器通信的全过程。
--trace参数
--trace参数将会输出CURL与服务器通信的全过程,并且输出原始的二进制数据。
-x参数
-x参数可以指定HTTP请求使用的代理。
curl -x socks5://admin:123@127.0.0.1:2081 https://www.typeboom.com/
上方的命令通过位于127.0.0.1:2081
的Socks5代理其用户名为admin
密码为123
,向服务器发出了GET请求。
如果不指定代理类型,CURL将默认采用HTTP代理协议。
curl -x admin:123@127.0.0.1:2082 https://www.typeboom.com/
上方的命令通过位于127.0.0.1:2081
的HTTP代理其用户名为admin
密码为123
,向服务器发出了GET请求。
-X参数
-X参数可以指定HTTP请求方法。
curl -X POST https://www.typeboom.com/
上方的命令向服务器发送了POST请求。
太牛逼看不懂
你是我羽翼下的风。