|
% J' l! L9 Z/ W* V* i
北风中独行的蜗牛zhuanlan.zhihu.com/jump_10curl 是一个很强大的命令行工具你可以把 CURL 想象成一个精简的命令行网页浏览器它支持几乎你能想到的所有协议,可以交互访问几乎所有在线内容。
0 `$ Z5 x' J/ r$ { 唯一和浏览器不同的是,cURL 不会渲染接收到的相应信息curl和wget类似也支持上传下载等感觉比wget更强大,但我觉得用途方面更偏重于模拟网络请求,而下载方面我更喜欢用wget,curl的用法也和wget类似! 9 D; `) S; q8 Y' N. x
查看源码,直接curl 网址,源码就会打印在命令行上:curl www.baidu.com8 w6 N! b+ @5 p0 M# a- _2 W3 S
也可以保存源码 用curl -O 文件名 url:curl -O baidu.txt wwww.baidu.com6 P: [& S. h- m: x; v5 j
3 b4 y8 Y* A7 \- A$ Q( c g3 t: _# `
这个和wget类似wget -O baidu1 www.baidu.com1 J2 P# B) T. ^, C i7 P2 o, u5 n# e
显示网页头部信息 用-i,当然也会把网页信息显示出来[root@VM_0_11_centos training]# curl -i www.baidu.com
; @+ t& \, _5 \ HTTP/1.1 200 OK
F: Z: V4 ]6 k' K0 U, k Accept-Ranges: bytes
% N# r0 s) r6 ?; j Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
7 @8 S* ]0 z$ Y9 L: W Connection: keep-alive
) Y0 V+ [! @* U Content-Length: 2381# x7 V! O( x/ {+ S6 `7 M3 v
Content-Type: text/html
+ J* S* \" c6 i! u! | Date: Thu, 02 Apr 2020 02:14:33 GMT
' {- ~0 f0 \# S8 n Etag: "588604c8-94d"
- t l7 \7 B- J* k Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT: |6 M; R" ]& Y' K6 ^
Pragma: no-cache
5 n3 g7 A3 {8 k" s Server: bfe/1.0.8.18
4 \3 k2 \8 e b. ^ Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
/ k( E" r8 O" @3 f! Z0 w3 L+ p) { v# j2 \$ y4 l( U+ J4 k4 S) R* G; I
2 m9 j% ]& N! z0 {9 o
xxx# |: v; y# ]: l$ I
. x" S% f+ P% a* ]
7 {" ]3 u ]% q8 N 参数 -v可以显示通信的过程:[root@VM_0_11_centos training]# curl -v www.baidu.com
; d1 \9 k, O1 Q; r& i3 ~ * About to connect() to www.baidu.com port 80 (#0)% B8 B% X: G" r1 W
* Trying 180.101.49.11...0 w; S Q) V p* G7 t: o
* Connected to www.baidu.com (180.101.49.11) port 80 (#0)8 {6 Z8 o, y3 T2 ^) E: d
> GET / HTTP/1.16 U" l% O8 w4 j
> User-Agent: curl/7.29.0
) @( f" ^1 f$ q) q4 _( k > Host: www.baidu.com
# S* Y7 U8 W7 c# d > Accept: */*% m! f- ]7 A+ C. H' e
>
& V: ]0 @) v5 J+ F7 d! f < HTTP/1.1 200 OK
" L" `# ?% [0 o9 M' R+ L! G < Accept-Ranges: bytes
# l/ T/ E& \% o < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
7 ?3 m" N+ w: h6 j < Connection: keep-alive
& k z; e3 z# {2 d P < Content-Length: 2381
' r3 [7 h/ {; L( n! c < Content-Type: text/html' r9 t: @* K! T- z% X
< Date: Thu, 02 Apr 2020 02:16:36 GMT' V4 J M) f/ ~) z
< Etag: "588604c8-94d"! m& v# e$ M3 Z8 o' J7 c6 V
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT4 h, u4 B% w m/ N0 l
< Pragma: no-cache* c/ t% E6 l2 p1 i) h) d& X% o! f) J
< Server: bfe/1.0.8.18# M: Y, [) s8 j6 \
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
D( J2 z, R' r/ R" j7 G9 A <" r/ }# g0 X$ Q6 z( i
, K. W7 M) H& g9 ` O 更详细的通信信息可以用 参数 --trance 文件名 url,具体信息保存到单独的文件中[root@VM_0_11_centos training]# curl --trace info.txt www.baidu.com
' W7 V* v6 E6 e1 d
5 p5 g6 v; f; L1 H) V htpp的动词,例如GET POST,PUT,DELETE等,需要参数 -X curl默认的是get请求,如果发送POSt请求. s* I, i% l: B% j
curl -X POST www.baidu.com5 |( t) G" L. p, G
发送表单的时候,GET很简单 只需要把数据拼接到url后面就行
$ q9 a, V, J# A0 K9 c4 W curl www.baidu.com?data=xxx&data1=xxx" Q8 P2 d3 n- q: K. d4 ?8 ]; z8 f3 b
POST也不难curl -X POST --data "data=xxx" example.com/form.cgi$ `* O7 {+ k4 `& a8 v5 O1 ?9 n
POST发送请求的数据体可以用-d
' p2 t; J+ C6 ~/ t7 { $ curl -dlogin=emma&password=123-X POST https://google.com/login6 i$ T6 `; |, _
或者
r8 d3 P9 l/ v5 M, P $ curl -d login=emma -d password=123 -X POST https://google.com/login- j0 n# D+ j4 _4 ~( l& y. e% Y
& C6 d7 R' C& R- t 使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded并且会自动将请求转为 POST 方法,因此可以省略-X POST。 ! J o4 W. j3 Z& Z
-d参数可以读取本地文本文件的数据,向服务器发送$ curl -d @data.txt https://google.com/login
2 K- b0 l; g5 ^. T" P 上面命令读取data.txt文件的内容,作为数据体向服务器发送文件上传: 假定文件上传的表单是下面这样: 3 H, w( G/ U0 g, S
curl上传就应该是:curl --form upload=@localfilename --form press=OK [URL]- r2 H" P6 H1 ]! V0 e. v4 Q
--referer参数表示的是你从哪个页面来的[root@VM_0_11_centos training]# curl --referer www.baidu.com www.baidu.com8 ?+ w6 _: F5 s, }! X+ ]
4 | x0 k8 o- E5 Q4 J7 M$ S. S0 S. r
User Agent字段,这个字段表示的是客户端设备的信息,服务器可能会根据这个User Agent字段来判断是手机还是电脑curl --user-agent " xx" url- P" B& n5 W I8 e4 f% S
比如IPhone1 N# y' X, _& V i6 X4 C1 h
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)5 R! T/ B* l+ x& j' \6 A) o9 c4 e3 r
AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5/ { Q- {+ ?% }' Y. ?! Q \% u3 ?3 ?
& @) ^ x2 L) G* ^/ B8 P+ Z n J
curl --user-agent "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)) Q( k+ o% O+ M, O& p* z
AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5" www.baidu.com
; c# G8 t5 V* b % C- m; }, o E/ ?9 H9 k3 K
--user-agent 可以用-A或者-H来替代--cookie参数,使用--cookie可以携带cookie信息curl --cookie "name=xxx" URL& |9 H8 R) e( r3 E) D
`-c cookie-file`可以保存服务器返回的cookie到文件,
0 t3 r% f5 H% X& v# J+ M( \% ?$ p `-b cookie-file`可以使用这个文件作为cookie信息,进行后续的请求。
' R7 [0 a( R+ ^+ N \0 T
5 D$ \3 }7 o' V- f- b 增加头部信息 --headercurl --header "Content-Type:application/json" http://example.com6 y: t" U5 P7 Z/ A
参考:http://www.ruanyifeng.com/blog/201 , \3 B/ X& H9 g/ Q# p' z. f
1/09/curl.htmlhttp://www.ruanyifeng.com/blog/2019/09/curl-reference.html
/ m2 ~( S. M& w4 @7 w, T. {! U* O, _6 X% L
4 k, U1 F/ t) S. f2 c
* }- U& |/ h5 P. [# X3 V N0 I) s. |* P
|