Curl 命令的使用
hanpy

image

curl 是常用的命令行工具,用来请求 Web 服务器。c的意思是client的意思。功能非常强大,命令行参数多达几十种,但是我记不住,罗列一些常用的。

官方网站: https://curl.se
官网文档: https://curl.se/docs/manpage.html

-X, –request

-X 或者 --request 参数指定 HTTP 请求的方法

GET方式

不带有任何参数时,curl 就是发出 GET 请求。

1
2
3
4
5
# 不带参数
$ curl https://hanpy.cn

# 带参数
$ curl https://hanpy.cn?name=hanpy

-G,--get 参数用来构造 URL 的查询字符串

下面命令会发出一个GET请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。

1
2
3
4
5
#1 
$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

#2 如果数据需要 URL 编码,可以结合--data--urlencode参数。
$ curl -G --data-urlencode 'comment=hello world' https://www.example.com

POST方式

1
2
3
4
5
# 不带参数
$ curl -X POST http://hanpy.cn

# 带参数
$ curl -X POST -d "name=hanpy" http://hanpy.cn

HEAD方式

1
2
#1
$ curl -X HEAD -I http://hanpy.cn

-I,--head 参数向服务器发出 HEAD 请求,并将返回服务器的HTTP标头,所以添加-X HEAD好像是没有太大意义

DELETE方式

1
2
#1
$ curl -X DELETE http://hanpy.cn

-d,–data

用于发送 POST 请求的数据体

-d 参数会自动加上标头 Content-Type : application/x-www-form-urlencoded 并且会自动将请求转为 POST 方法,因此可以省略-X POST

1
2
3
4
5
6
7
8
#1
$ curl -d "name=hanpy&age=28" http://hanpy.cn

#2
$ curl -d "name=hanpy" -d "age=28" http://hanpy.cn

#3 读取本地文件发送请求
$ curl -d "@param.txt" http://hanpy.cn

--data-urlencode-d 的区别是会进行URL编码

1
$ curl --data-urlencode 'content=hello world' http://hanpy.cn

-H, –header

添加 HTTP 请求的标头

1
2
3
4
5
#1
$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' http://hanpy.cn

#2 json格式请求
$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' http://hanpy.cn

-A,–user-agent

指定客户端的用户代理标头,即User-Agent

1
2
3
4
5
#1 User-Agent 修改为google浏览器
$ 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' http://hanpy.cn

#2 用-H也可以搞定
$ curl -H 'User-Agent: php/1.0' http://hanpy.cn

-b,–cookie

参数用来向服务器发送 Cookie。

1
2
3
4
5
6
7
8
#1 单个
$ curl -b 'foo=bar' http://hanpy.cn

#2 多个
$ curl -b 'name=hanpy;age=28' http://hanpy.cn

#3 发送文本中的cookie
$ curl -b cookie.txt http://hanpy.cn

-c,–cookie-jar

将服务器设置的 Cookie 写入一个文件。

1
2
#1 将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。
$ curl -c cookies.txt http://hanpy.cn

-e,–referer

用来设置 HTTP 的标头Referer,表示请求的来源

1
2
3
4
5
#1
$ curl -e 'https://www.baidu.com?source=xxx' https://hanpy.cn

#2 用-H还是可以搞定
$ curl -H 'Referer: https://google.com?q=example' https://www.example.com

-o,–output

将服务器的回应保存成文件,等同于wget命令

1
$ curl -o hanpy.html https://hanpy.cn

-O,–remote-name

将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

1
$ curl -O https://hanpy.cn

-u, –user

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

1
2
3
4
5
6
7
8
#1
$ curl -u 'bob:12345' https://google.com/login

#2
$ curl https://bob:12345@google.com/login

#3 只设置了用户名,执行后,curl 会提示用户输入密码
$ curl -u 'bob' https://google.com/login

-x,–proxy

指定 HTTP 请求的代理

-x, –proxy [protocol://]host[:port]

1
2
3
4
5
6
7
#1 如果没有指定代理协议,默认为 HTTP
$ curl -x 127.0.0.1:9999 http://www.cip.cc/
地址 : 美国 加利福尼亚州 洛杉矶
运营商 : digicoreglobal.com
数据二 : 美国 | 加利福尼亚州洛杉矶DGCHost数据中心
数据三 : 中国香港
URL : http://www.cip.cc/103.82.4.14