curl 工具使用

工具简介

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

参数简介

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
35
36
37
38
39
40
41
42
43
44
45
# 调试类
-v, --verbose 输出信息
-q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer
-K, --config FILE 指定配置文件
-L, --location 跟踪重定向 (H)

# CLI显示设置
-s, --silent Silent模式。不输出任务内容
-S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示
-f, --fail 不显示 连接失败时HTTP错误信息
-i, --include 显示 response的header (H/F)
-I, --head 仅显示 响应文档头
-l, --list-only 只列出FTP目录的名称 (F)
-#, --progress-bar 以进度条 显示传输进度

# 数据传输类
-X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST
-H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json"
-e, --referer 设定 referer (H)
-d, --data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H)
--data-raw <data> ASCII 编码 HTTP POST 数据 (H)
--data-binary <data> binary 编码 HTTP POST 数据 (H)
--data-urlencode <data> url 编码 HTTP POST 数据 (H)
-G, --get 使用 HTTP GET 方法发送 -d 数据 (H)
-F, --form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H)
--form-string <name=string> 模拟 HTTP 表单数据提交 (H)
-u, --user <user:password> 使用帐户,密码 例如 admin:password
-b, --cookie <data> cookie 文件 (H)
-j, --junk-session-cookies 读取文件中但忽略会话cookie (H)
-A, --user-agent 指定客户端的用户代理标头,user-agent设置,默认用户代理字符串是curl/[version] (H)

# 传输设置
-C, --continue-at OFFSET 断点续转
-x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理
-U, --proxy-user USER[:PASSWORD] 代理用户名及密码

# 文件操作
-T, --upload-file <file> 上传文件
-a, --append 添加要上传的文件 (F/SFTP)

# 输出设置
-o, --output <file> 将输出写入文件,而非 stdout
-O, --remote-name 将输出写入远程文件
-D, --dump-header <file> 将头信息写入指定的文件
-c, --cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置

常用实例

GET 请求

1
curl http://www.yahoo.com/login.cgi?user=XXXXXXXXX&password=XXXXXX

POST 请求

1
2
3
curl -d "user=XXXXXXXX&password=XXXXX" http://www.yahoo.com/login.cgi
// POST 文件
curl -F upload= $localfile -F $btn_name=$btn_value http://192.168.10.1/www/focus/up_file.cgi

分块下载

1
2
3
4
5
6
7
curl -r  0 -10240  -o "zhao.part1"  http://192.168.10.1/www/focus/zhao1.mp3 &\
curl -r 10241 -20480 -o "zhao.part1" http://192.168.10.1/www/focus/zhao1.mp3 &\
curl -r 20481 -40960 -o "zhao.part1" http://192.168.10.1/www/focus/zhao1.mp3 &\
curl -r 40961 - -o "zhao.part1" http://192.168.10.1/www/focus/zhao1.mp3
...
// 合并块文件
cat zhao.part* > zhao.mp3

ftp 下载

1
curl -O ftp://用户名:密码@192.168.10.1:21/www/focus/enhouse/index.php

ftp 上传

1
curl -T upload_test.php ftp://用户名:密码@192.168.10.1:21/www/focus/enhouse/