curl
是日常运维经常使用到的命令,这里记录下一些常用的使用示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
MMM. .MMM
MMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM _________________________________
MMMMMMMMMMMMMMMMMMMMM | |
MMMMMMMMMMMMMMMMMMMMMMM | Responsive is better than fast. |
MMMMMMMMMMMMMMMMMMMMMMMM |_ _____________________________|
MMMM::- -:::::::- -::MMMM |/
MM~:~ 00~:::::~ 00~:~MM
.. MMMMM::.00:::+:::.00::MMMMM ..
.MM::::: ._. :::::MM.
MMMM;:::::;MMMM
-MM MMMMMMM
^ M+ MMMMMMMMM
MMMMMMM MM MM MM
MM MM MM MM
MM MM MM MM
.~~MM~MM~MM~MM~~.
~~~~MM:~MM~~~MM~:MM~~~~
~~~~~~==~==~~~==~==~~~~~~
~~~~~~==~==~==~==~~~~~~
:~==~==~==~==~~
|
我们要怎样才能获取到上面这只可爱的彩虹猫呢?它是通过 api.github.com/octocat
接口生成的。
打开 iTerm2
,输入 curl api.github.com/octocat
你会发现什么也没有。
只获取响应头
让我们加个参数 -I, --head
看看发生了什么。
1
2
3
4
|
$ curl -I api.github.com/octocat
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Location: https://api.github.com/octocat
|
跟随重定向
从获取到的响应头可以发现,我们是通过 http
协议请求接口。
而 http
协议是明文不安全的,服务端已经做了 301
永久跳转到 https
协议的链接。
此时,我们就可以通过 -L, --location
参数自动跟随重定向,从而获取到我们想要的结果。
1
|
$ curl -L api.github.com/octocat
|
修改 User-Agent
User-Agent
是客户端的一个身份标识,服务端可根据这个标识来区分PC及手机,然后做出不同的响应。
默认curl
的User-Agent
是curl/版本号
, 可通过-A, --user-agent <name>
来修改进行伪装。
1
|
$ curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" -L www.guixiaotu.com
|
服务端日志看到的User-Agent
字段:
1
|
27.152.156.59 - - [12/Jan/2023:14:19:28 +0800] "GET / HTTP/2.0" 403 541 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
|
使用代理
有些网站会限制某些地区或国家访问,这时就可通过设置代理-x, --proxy [protocol://][user:password@]host[:port]
来访问。
参数说明:
protocol
可指定socks4
、socks4a
、socks5
、socks5h
、https
和http
,默认使用http
。
- 用户名或密码如有包含特殊字符,需要进行 URL Encode。
- 默认使用
1080
端口。
不使用代理:
使用代理:
1
2
3
|
# 用户名:xo9
# 密 码:abc@123445
$ curl -x socks5://xo9:abc%[email protected]:8088 ip.sb
|
下载文件
可通过-o, --output <file>
指定保存文件名,也可通过-O, --remote-name
使用远程文件名。
通过下载rclone
安装脚本来看看区别。
1
|
$ curl https://rclone.org/install.sh -o rclone.install.sh
|
1
|
$ curl https://rclone.org/install.sh -O
|
1
2
3
|
$ ls -l *.sh
-rw-r--r-- 1 xo9 staff 4669 1 12 14:57 install.sh
-rw-r--r-- 1 xo9 staff 4669 1 12 14:57 rclone.install.sh
|
上传文件
可通过-F, --form<name=content>
参数来上传文件。
@
前缀表示添加文件。
1
|
$ curl -F avatar=@/home/xo9/avatar.png https://gitlab.com/api/v4/users
|
添加请求头
如访问gitlab
的api
接口时,要求提供Token
认证,这时就可通过-H, --header <header/@file>
来添加。
查看所有gitlab
项目:
1
|
$ curl -H "PRIVATE-TOKEN: zmxxxxxxxxAm-sxxze" https://gitlab.com/api/v4/projects
|
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
|
[
{
"id": 666,
"description": null,
"name": "awesome-compose",
"name_with_namespace": "\uxxxx\uxxxx\uxxxx\uxxxx\uxxxx / awesome-compose",
"path": "awesome-compose",
"path_with_namespace": "root/awesome-compose",
"created_at": "2022-12-22T16:23:38.276+08:00",
"default_branch": "main",
"tag_list": [],
"topics": [],
"ssh_url_to_repo": "ssh://[email protected]/root/awesome-compose.git",
"http_url_to_repo": "https://gitlab.com/root/awesome-compose.git",
"web_url": "https://gitlab.com/root/awesome-compose",
"readme_url": "https://gitlab.com/root/awesome-compose/-/blob/main/README.md",
"avatar_url": null,
"forks_count": 0,
"star_count": 0,
"last_activity_at": "2022-12-22T16:23:38.276+08:00",
"namespace": {
"id": 3,
"name": "\uxxxx\uxxxx\uxxxx\uxxxx\uxxxx",
"path": "root",
"kind": "group",
"full_path": "root",
"parent_id": null,
"avatar_url": "/uploads/-/system/group/avatar/3/\u5c0f\u7a0b\u5e8flogo.png",
"web_url": "https://gitlab.com/groups/root"
}
......
}
]
|
使用其它请求方法
默认是使用GET
方法,如果要使用其它请求方法,可以使用-X, --request <command>
参数。
删除gitlab
项目:
1
|
$ curl -X DELETE -H "PRIVATE-TOKEN: zmxxxxxxxxAm-sxxze" https://gitlab.com/api/v4/projects/666
|
添加请求数据
如创建gitlab
项目,我们需要提供项目名称,这里就可以通过-d, --data <data>
提供请求数据。
创建gitlab
项目:
1
|
$ curl -X POST -H "PRIVATE-TOKEN: zmxxxxxxxxAm-sxxze" -H "Content-Type: application/json" -d '{"name": "curl_examples", "description": "about common curl command examples", "path": "curl_examples", "namespace_id": "3", "initialize_with_readme": "true"}' https://gitlab.com/api/v4/projects/
|