|
+ f6 \0 Y, j. }# }7 G 文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。 欢迎关注我的公众号,文章每周更新。
; G* u# Z: _7 x- N ?6 G( {* m 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。 1 X6 Q) f R/ X- [
查看 cURL 源代码可以访问官方 Github如果安装 cURL 呢?ubuntu / Debian.sudo apt install curl# V& Z( _0 b' T$ m) u# D! \
CentOS / Fedora.sudo yum install curl
' z' u" {- r/ M8 F4 `9 o9 } 。
5 K$ d" u% i2 F7 v; k" p# ? Windows.如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载1. 请求源码直接 curl $ curl http://wttr.in/
- U4 K& |" U1 a( X 。
5 g+ x* E: j, J4 Y 上面请求的示例网址是一个天气网站,很有意思,会根据你的请求 ip 信息返回你所在位置的天气情况。
- R& I6 ]8 X- o/ |- F 写这篇文字时我所在的上海正在下雨,窗外飘雨无休无止2. 文件下载使用 -o 保存文件,类似于 wget 命令,比如下载 README 文本保存为 readme.txt 文件如果你需要自定义文件名,可以使用 。 : {5 l9 W* r1 O' J" ^
-O自定使用 url 中的文件名$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README
3 A( L3 u5 u9 U& \/ Z % Total % Received % Xferd Average Speed Time Time Time Current# f. @, c& O9 H V
Dload Upload Total Spent Left Speed
, j! X' e) |7 ?6 f1 c/ P: e 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939! D1 v" ?* `: h: a! a
。 / T6 v8 p# H/ n! w# D% u E
下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等可以使用 -s 参数禁用进度表$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README5 X- V# j& u6 b
% Total % Received % Xferd Average Speed Time Time Time Current1 t5 `+ X, A7 ~$ ^3 j. e! b; |
Dload Upload Total Spent Left Speed9 o- S% ?2 l( x" _4 k
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 19395 X" `( E* H0 Q$ c
$
8 G& R. v U; U3 w0 }3 g/ D9 z7 @ $ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s4 ] ^0 k* h- g' w8 x/ r
。 : D: e: w( A1 c2 f/ Y& L5 w. O' R [
也可以使用 --process-bar 参数让进度表显示为进度条$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar: a. D) k. ?* [2 O: ?# y
########################################################################################## 100.0%: t3 _' j/ }5 D' ?
。
) A# J/ x! }! F2 c cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可下面是断点续传下载 ubuntu20.04 镜像的例子$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
/ r- K) s+ ]9 }) U- O8 R; k0 ` ## 1.7%3 t) g: D! p- F/ k3 M- @
^C
! U2 Z+ Q9 X3 o2 `/ ] $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
) [! t9 a3 p4 }- k5 R% L ### 2.4%- _) H% [$ Y, e
^C
0 ^" K8 i8 C2 q6 \ C' L; ~) _+ } $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
& L9 ?; j9 S. E2 H& h2 t" L$ `9 U ### 2.7%: C, o/ y; [' E& O. C4 d" g6 X
^C! E( A2 |/ [% P; j
$+ }2 Y& o6 p( T- J" b- q" T; X
。
d* ]$ W5 g2 [- a3 j 什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k( C3 l4 @1 D' @
。
/ N* G5 f1 e8 c& q P/ G5 i 什么?你又要从 FTP 服务器下载文件了?不慌curl -u user:password -O ftp://ftp_server/path/to/file/& y3 J# v6 I, S& m3 |. T+ k
3. Response Headers使用 . I s" ^- h2 Q2 ?* g! W
-i 参数显示 Response Headers 信息使用 -I 可以只显示 Response Headers 信息$ curl -I http://wttr.in" K' V6 L3 D$ Z! ~; m+ K# J
HTTP/1.1 200 OK
) |2 V% S( q( z, c Server: nginx/1.10.36 W8 S* x1 Y# K2 H& Y& N: U* y% x
Date: Sat, 30 May 2020 09:57:03 GMT
7 R) D- h% P2 B. [ Content-Type: text/plain; charset=utf-8
/ _/ P' {0 C( ?7 r i: s5 X6 U Content-Length: 8678
2 a+ i) ~2 j0 D: }" p Connection: keep-alive. h+ w! X, y+ D7 L
Access-Control-Allow-Origin: *, M% _- d0 G8 t% I1 r* B3 N7 b
。
) j- p$ z0 W$ V4 _" X9 N5 G 4. 请求方式(GET/POST/...)使用 -X 轻松更改请求方式$ curl -X GET http://wttr.in
+ @% L- u4 g; k9 b- A2 Q6 K4 q $ curl -X POST http://wttr.in
# u) a" w5 t* x- Q. D; J9 L! B; h; I $ curl -X PUT http://wttr.in
4 C) I5 o) B2 _- U ...% Z5 ^* X3 O0 X; d5 V2 N8 B' H
。 8 D' r, L3 c6 J5 |7 }4 S% f
5. 请求参数以传入参数 name 值为 未读代码 为例Get 方式参数直接url拼接参数$ curl -X GET http://wttr.in?name=未读代码/ e: h/ o w& G" m
Post 方式使用 --data。 ; M- H, B) h: k
设置参数$ curl -X POST --data "name=未读代码" http://wttr.in3 E1 l, `6 f0 n
请求时也可以自定义 header 参数,使用 --harder 添加$ curl --header "Content-Type:application/json" http://wttr.in
9 p% Q/ j* U$ i6 S 。 ; c' i- b0 a1 `/ e9 U9 u4 E+ C
6. 文件上传cURL 的强大远不止此,表单提交,上传文件内容也不在话下,只需要使用 -F 或者 -D参数,-F 会自动加上请求头 Content-Type: multipart/form-data ,而 1 w' c0 ~1 B/ q( m( \- `2 t5 o! Y
-D 则是 Content-Type : application/x-www-form-urlencoded.比如上传一个 protrait.jpg 图片$ curl -F profile=@portrait.jpg https://example.com/upload
3 L e. ]! x# |9 P( W 。 5 W8 v/ y! s6 ~0 | u# b' P
提交一个具有 name 和 age 参数的 form 表单curl -F name=Darcy -F age=18 https://example.com/upload
0 D- X# s3 `9 F i" w0 y/ d 参数对应的内容也可以从文件中读取。 8 D% x- Y8 w9 t$ F" R$ d& W
curl -F "content=<达西的身世.txt" https://example.com/upload
% u8 J% L$ X. [, X4 L; { 上传时同时指定内容类型curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload
% l$ F; } c9 U% q 。 " ?8 b1 e" u( @# s
上传文件的和其他参数一起curl -F file=@"localfile";filename="nameinpost" example.com/upload* K% s+ N1 M3 r) W8 c2 I7 n
7. 网址通配cURL 可以实现多个网址的匹配,你可以使用 。 9 I' a T- j( _! \7 |+ R
{} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com2 z, J7 F0 Q# B. U) ]( `0 b
$ curl http://{www,pan,fanyi}.baidu.com
" f4 u5 M* M4 T0 I% g # 虚构网址1-10开头的baidu.com,然后请求# U/ H& o; @$ _8 m
$ curl http://[1-10].baidu.com
! w) w3 J0 F2 ]0 h # 虚构网址a-z开头的baidu.com,然后请求3 D4 I8 v, t2 X+ y; b! g
$ curl http://[a-z].baidu.com
+ U8 y4 L3 _ q z2 L 。 5 [- z) Z& F. ^
这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律8. 使用 cookie请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.$ curl -c wdbyte_cookies http://www.wdbyte.com
- o. J- X) A! b* j+ X2 L. z $ curl -b wdbyte_cookes http://www.wdbyte.com/ B- K: M9 {3 j+ t+ R4 B
。
4 s) g$ d/ }2 n* M 总结以上就是 cURL 的常见用法了,最后告诉你一个小技巧,Chrome、Firefox 等浏览器可以直接拷贝请求为 cURL 语句。保存之后下次请求测试非常方便。
4 l$ s4 N, |. D, K' \* J) ]. ~( N' H 参考资料https://curl.haxx.se/docs/manpage.html最后的话 文章已经收录在 Github.com/niumoo/JavaNotes ,欢迎Star和指教更有一线大厂面试点,Java程序员需要掌握的核心知识等文章,也整理了很多我的文字,欢迎 。 # @: f* t" M$ Z9 \: f X% R
Star 和完善,希望我们一起变得优秀。文章有帮助可以点个「赞」或「分享」,都是支持,我都喜欢! 文章每周持续更新,要实时关注我更新的文章以及分享的干货,可以关注「 程序猿阿朗」公众号或者我的博客。
9 ?; e. j4 J% Q! Q
( w4 d6 t! N$ q3 R5 i
% m& @' B9 F# p4 R1 |- {8 A" U3 F0 Q6 L- q& o; j
* U3 |* b1 ] _ g. W8 O
|