|
" P7 k" m4 G3 ~0 x) o7 c$ p" ] 文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。 欢迎关注我的公众号,文章每周更新。
& V9 ]" z7 p: `, p- k* q/ ~3 ~ cURL 是一个开源免费项目,主要是命令行工具 cURL 和 libcurl,cURL 可以处理任何网络传输协议,但是不涉及任何具体的数据处理cURL 支持的通信协议非常丰富,如 DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP, RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET 以及 TFTP。 # b* y# X6 m# _) P% |, P
查看 cURL 源代码可以访问官方 Github如果安装 cURL 呢?ubuntu / Debian.sudo apt install curl
) p5 j3 Z8 E# b$ g: o CentOS / Fedora.sudo yum install curl
, s3 C& P( |1 o: P! Z% F 。
) x! w/ a5 p- ~2 _) f Windows.如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载1. 请求源码直接 curl $ curl http://wttr.in/" S/ U# Q- s! x% o% U& D
。
1 O0 X% }/ N+ Q# A Q8 L' R1 @1 m0 k* B 上面请求的示例网址是一个天气网站,很有意思,会根据你的请求 ip 信息返回你所在位置的天气情况。
7 Y: F" j, [/ J; u& x9 W 写这篇文字时我所在的上海正在下雨,窗外飘雨无休无止2. 文件下载使用 -o 保存文件,类似于 wget 命令,比如下载 README 文本保存为 readme.txt 文件如果你需要自定义文件名,可以使用 。 a3 b, z9 G& A% w8 T. W2 I
-O自定使用 url 中的文件名$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README: t8 G4 U) }$ I9 f
% Total % Received % Xferd Average Speed Time Time Time Current
( Y5 X+ v/ o( k8 I) z Dload Upload Total Spent Left Speed& |& J( r" |2 L$ n: q* ]% b$ `% [
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939- y8 a2 A/ u! W3 F8 r: {3 `. y
。
3 j$ J5 n& L# d" `- T9 N" {1 { 下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等可以使用 -s 参数禁用进度表$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README) P) a" u& _# I1 {7 `
% Total % Received % Xferd Average Speed Time Time Time Current
2 a, {! p) {: [# x* c1 n Dload Upload Total Spent Left Speed
. z7 |- Y# Y! s: J: m6 w5 a2 W 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939* Z- t% t! w8 L; r
$
/ |6 Z4 G) f% B( w; a $ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s
+ @! L, _5 Q7 n% C 。 ) `6 ~4 h4 g" m# ?) e
也可以使用 --process-bar 参数让进度表显示为进度条$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar
8 W# }2 H1 X, i; U; i. f0 G& y ########################################################################################## 100.0%
0 H$ g+ ?" j9 ~1 U 。 * m+ _; |1 q; n8 Z ~
cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可下面是断点续传下载 ubuntu20.04 镜像的例子$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar' x5 P! P9 E+ P5 r$ J$ G
## 1.7%- o6 n! p& D0 j" g, n
^C
. k) M, i+ v" x8 U# Y4 g $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar& g$ N: o; a2 @( p. N
### 2.4%
0 [$ K/ X) ?/ Q# m! ?8 l [ ^ ^C e( u. R7 h) W1 q- j+ r
$ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar" l* ] T! C; S# R1 u
### 2.7%
. Y, L# a c, m* F1 n ^C
) Z$ Z; d6 Y$ t5 {$ @0 C2 J $4 S8 I5 G4 k. d1 s" l
。 2 ?* c5 M9 f; Z2 k/ g
什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k
- q9 d& q3 H- l4 \0 B$ S3 k 。
1 {# l& p7 f/ ? 什么?你又要从 FTP 服务器下载文件了?不慌curl -u user:password -O ftp://ftp_server/path/to/file/$ Z" ^4 Y7 |) N7 k$ ^5 U
3. Response Headers使用 4 T/ C9 {. h% e; Y
-i 参数显示 Response Headers 信息使用 -I 可以只显示 Response Headers 信息$ curl -I http://wttr.in2 O- ^; N; E- d
HTTP/1.1 200 OK" C" W( R# T, d; @% } m3 U
Server: nginx/1.10.3' w, H" U- s" B4 L
Date: Sat, 30 May 2020 09:57:03 GMT
8 H. R6 S/ ?/ C8 A; d v) X4 Y Content-Type: text/plain; charset=utf-8/ G7 X& k! j" |6 t" }
Content-Length: 8678
. t8 e6 K* [& \* J Connection: keep-alive- L7 M2 o% G0 D* B v( }9 `
Access-Control-Allow-Origin: *
( h5 k1 Y F( A1 d2 q; k/ n 。 # k }' j( ~; T
4. 请求方式(GET/POST/...)使用 -X 轻松更改请求方式$ curl -X GET http://wttr.in7 G+ y3 y0 x- M" f e6 h
$ curl -X POST http://wttr.in/ |( K0 I/ A: M+ g' Z/ d5 D! ~, V
$ curl -X PUT http://wttr.in+ K0 q$ x, o5 A% }0 G
...
# P' j6 h/ @% m7 t r9 F& r4 U 。
! x1 _9 _& x! Z5 m* T 5. 请求参数以传入参数 name 值为 未读代码 为例Get 方式参数直接url拼接参数$ curl -X GET http://wttr.in?name=未读代码# J- A4 ]6 l( ]$ ~
Post 方式使用 --data。
5 O; @0 C( G }) A3 {1 Y( l 设置参数$ curl -X POST --data "name=未读代码" http://wttr.in
. Q& Y+ }) Q& s9 B& w& ~ 请求时也可以自定义 header 参数,使用 --harder 添加$ curl --header "Content-Type:application/json" http://wttr.in) k, S& l: g/ u7 p2 s. R- d8 }
。 * P: V. K8 U! Z, G
6. 文件上传cURL 的强大远不止此,表单提交,上传文件内容也不在话下,只需要使用 -F 或者 -D参数,-F 会自动加上请求头 Content-Type: multipart/form-data ,而 ; Y9 b) A6 R: |4 y, t, N
-D 则是 Content-Type : application/x-www-form-urlencoded.比如上传一个 protrait.jpg 图片$ curl -F profile=@portrait.jpg https://example.com/upload
, g* ~3 [) t. ?' j+ ~ 。
/ T. Q1 `) B# q" s7 h 提交一个具有 name 和 age 参数的 form 表单curl -F name=Darcy -F age=18 https://example.com/upload1 m" u" w- }8 S# i2 `! m: d
参数对应的内容也可以从文件中读取。
4 i' N0 P) s$ L$ O curl -F "content=<达西的身世.txt" https://example.com/upload
: Z/ z8 T& V6 a/ g 上传时同时指定内容类型curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload
8 D5 m6 D- g, [. H- N 。 . q$ G$ Y' i% x4 M" g
上传文件的和其他参数一起curl -F file=@"localfile";filename="nameinpost" example.com/upload, x$ z! w) Z; F7 e/ Q" K5 y
7. 网址通配cURL 可以实现多个网址的匹配,你可以使用 。
) R4 k. R% `5 d D! a* W. f7 } {} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com7 E& T6 ]0 G7 R) Y9 h
$ curl http://{www,pan,fanyi}.baidu.com
x9 T: _! g1 s8 j # 虚构网址1-10开头的baidu.com,然后请求( b/ R: i6 p8 U- z& I
$ curl http://[1-10].baidu.com* I& e# K2 _( P% j& S9 |, j w
# 虚构网址a-z开头的baidu.com,然后请求2 U, a4 o& _0 V+ _& i
$ curl http://[a-z].baidu.com' X( O' r e% F C
。
% v6 q/ \5 l( M* s( t# k 这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律8. 使用 cookie请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.$ curl -c wdbyte_cookies http://www.wdbyte.com
/ L) ^" B- s$ Z7 I0 L $ curl -b wdbyte_cookes http://www.wdbyte.com
8 _3 K% m1 D- W, b 。
/ N& P: K: V+ y5 b9 f 总结以上就是 cURL 的常见用法了,最后告诉你一个小技巧,Chrome、Firefox 等浏览器可以直接拷贝请求为 cURL 语句。保存之后下次请求测试非常方便。
/ S* j/ F- r/ M 参考资料https://curl.haxx.se/docs/manpage.html最后的话 文章已经收录在 Github.com/niumoo/JavaNotes ,欢迎Star和指教更有一线大厂面试点,Java程序员需要掌握的核心知识等文章,也整理了很多我的文字,欢迎 。 3 `0 N' `8 q/ \7 |
Star 和完善,希望我们一起变得优秀。文章有帮助可以点个「赞」或「分享」,都是支持,我都喜欢! 文章每周持续更新,要实时关注我更新的文章以及分享的干货,可以关注「 程序猿阿朗」公众号或者我的博客。 ' _: q l9 [6 X6 d2 i; X# \
% a7 X; [ O+ l! Y. p0 i
9 j" B) G" y6 D3 [5 A# Y2 u% [& o) {6 W- ^+ X. A* u) W. N u! a
6 a7 R! F. L/ O! `- u) [( K
|