1、概述
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
参考文档:https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
2、常用参数
-X
-X 参数指定HTTP请求的方法,不写默认为GET请求
1 | # 指定 post 请求 |
-H
-H 参数添加HTTP请求的标头
1 | # 添加 Content-Type: application/json 和 Accept-Language: en-US 两个请求标头 |
-d/–data-urlencode
-d 参数用于发送 POST 请求的数据体。使用 -d 参数以后,HTTP请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST。
–data-urlencode 参数等同于 -d ,发送POST请求的数据体,区别在于会自动将发送的数据进行URL编码。
多个参数可以使用使用多个 -d 参数,也可以使用 & 进行参数拼接。
POST请求发送 json 格式请求体,可以配合使用
-d ‘{“key”, “value”}’ -H ‘Content-Type: application/json’ 。
-d 参数可以读取本地文本文件的数据,向服务器发送。例如使用
-d ‘@/json.txt’ 参数即可使用本地文件json数据。
1 | # 多个参数 |
-G
-G 参数用来构造URL的查询字符串,结合-d 参数进行url参数拼接,如果需要进行URL编码使用–data-urlencode 参数
如果不需要URL编码,url拼接更简单的方式是直接使用拼接后的url,用单引号引上即可,例如curl 'http://www.example.com/page/list?pageNum=1&pageSize=10'
1 | # http://www.example.com/page/list?pageNum=1&pageSize=10 |
-i
-i 参数打印出服务器响应的 HTTP 标头。收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。
1 | $ curl -i http://www.baidu.com |
-b
-b 参数用来向服务器发送Cookie
发送多个Cookie,可以使用英文分号;进行分隔
-b 参数后接文件路径,也可以读取本地文件来发送Cookie
1 | # 生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie |
-A
-A 参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]
也可以通过 -H 参数直接指定标头,更改User-Agent
1 | # 将用户代理标头改成 Chrome 浏览器 |
-e
-e 参数用来设置HTTP的标头Referer,表示请求的来源
也可以通过 -H 参数直接指定标头,更改Referer
1 | # 将请求来源设置为google.com |
-o
-o 参数将服务器的回应保存成文件,等同于wget命令,后接参数可以指定文件下载的路径以及名称
1 | # 将阿里云yum镜像源文件下载到/etc/yum.repos.d/CentOS-Base.repo |
3、curl简单实践
需求:使用curl命令来实现oauth2.0密码模式获取token,以及使用token发送需要认证的请求。
- 获取token
- 使用token来发送需要登录的请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# 1.获取access_token
$ curl -i -d 'username=root' -d 'password=123' -d 'grant_type=password' -d 'client_id=c1' -d 'client_secret=secret' -d 'redirect_uri=http://127.0.0.1:12222/open/sucess' 'http://localhost:12222/oauth/token'
HTTP/1.1 200
Cache-Control: no-store
Pragma: no-cache
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 06 Aug 2023 12:45:50 GMT
{"access_token":"36f4c522-909b-46a1-a3e7-d15343b8419e","token_type":"bearer","refresh_token":"ba92d79a-2fcd-430d-8a0f-04fd39206195","expires_in":3599,"scope":"all"}
# 2.携带token访问资源
curl -i -H 'Authorization: Bearer 36f4c522-909b-46a1-a3e7-d15343b8419e' http://localhost:10000/hello
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/plain;charset=UTF-8
Content-Length: 108
Date: Sun, 06 Aug 2023 12:47:37 GMT
{"success":true,"code":"200","msg":"成功","respTime":"2023-08-06 20:47:37","data":"hello, you have logon"}