找回密码
 注册
查看: 1470|回复: 1

curl加参数下载文件到指定的地方

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-11-2 11:28:49 | 显示全部楼层 |阅读模式
通过curl 加o参数,下载文件到指定目录:
$ D$ Q' M) B+ x/ e5 y8 n
0 v0 {1 N9 S" _* N$ k7 \. mcurl -o /etc/cloud/package/telegraf_system.conf http://192.168.0.75/telegraf_system.conf% ?( L5 R, D4 @8 T, o9 K

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-11-2 16:44:31 | 显示全部楼层
命令:curl
6 ^% |% W: `; A9 q. y. m" o在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。  o1 @) `5 I' V2 _+ x
6 Q( c2 x0 x: A+ X+ K
语法:# curl [option]
: y. J9 f* X2 b" Z2 @常见参数:: k3 N1 a  N3 G& r  X- [- J

" f6 ?, k+ A' K复制代码
; ]* q8 |4 C5 M/ E4 q5 C复制代码. O2 C3 k, d. y  T
-A/--user-agent <string>              设置用户代理发送给服务器+ o5 P0 J; ?. p: |, {
-b/--cookie <name=string/file>    cookie字符串或文件读取位置" h" T  @; v& T2 O8 T! i( s' }
-c/--cookie-jar <file>                    操作结束后把cookie写入到这个文件中
7 U2 f' z, O. r, q-C/--continue-at <offset>            断点续转
# J) r& t1 R- l; `) y6 }-D/--dump-header <file>              把header信息写入到该文件中
( w9 K/ m4 {! N/ t' }! I-e/--referer                                  来源网址
. d5 y" q' |# V2 W3 A% Q6 }-f/--fail                                          连接失败时不显示http错误
7 g+ Z  ^% N" \; ?  F! l+ g-o/--output                                  把输出写到该文件中
1 m0 H$ D, p) P3 r9 F# D: b-O/--remote-name                      把输出写到该文件中,保留远程文件的文件名
* k5 @) n) ]2 W& K) y-r/--range <range>                      检索来自HTTP/1.1或FTP服务器字节范围& p) |0 |1 A1 ]8 a% W8 s
-s/--silent                                    静音模式。不输出任何东西1 a2 I+ v% [: X
-T/--upload-file <file>                  上传文件4 d1 t) W9 V% m! E, |
-u/--user <user[:password]>      设置服务器的用户和密码* g( Q6 S2 Q) T3 h2 x
-w/--write-out [format]                什么输出完成后
  B8 k9 r) Z5 H" _5 {4 R9 v-x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
- a  L. o1 Y2 ~4 n-#/--progress-bar                        进度条显示当前的传送状态$ a8 \5 O+ L1 W- V8 |  Q' ?
复制代码4 C- Z, [$ P8 c. j. s5 J
复制代码4 ~( w$ a6 z# D4 o5 H0 }
例子:
$ V$ L) _3 ?) n! Y4 @# e% A1、基本用法
; I& g; a( e2 l* C; O! I2 Q& |! g5 f1 o  n! ?
# curl [url]http://www.linux.com
. ]2 Z: I" R! Z+ h8 L" l& X1 i" X
执行后,www.linux.com 的html就会显示在屏幕上了! g* _% H6 ~+ W  [+ F3 l7 R! ~8 @
Ps:由于安装linux的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站* s- n2 W, ^3 U7 w: L
, v; f5 U( _0 a, t5 O
2、保存访问的网页& n8 |% d9 J8 Q5 Z
2.1:使用linux的重定向功能保存
* _6 C" g4 `' p3 s
  ~" T1 U( I( [/ U; @& ]# curl http://www.linux.com >> linux.html/ W  [* \9 Y* f* `# J* U
2.2:可以使用curl的内置option:-o(小写)保存网页
  y1 \. u/ H3 ?- |2 L* Z8 z5 c/ ~1 u+ s- Z& r/ z
$ curl -o linux.html http://www.linux.com- F" _, \& W; W3 h1 U9 |
执行完成后会显示如下界面,显示100%则表示保存成功* x1 d' J! W* v1 E: N7 c
/ M4 F% w/ y, C9 M( K5 C
% Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
2 P, Z' P. Z* p: j, q! j1 K                                Dload  Upload  Total  Spent    Left  Speed" u) }% V: x* {0 Q1 b5 L: Z, f
100 79684    0 79684    0    0  3437k      0 --:--:-- --:--:-- --:--:-- 7781k" B) Q. o4 o. n
2.3:可以使用curl的内置option:-O(大写)保存网页中的文件
/ o3 m2 y# Y& {" y要注意这里后面的url要具体到某个文件,不然抓不下来' L1 Y; X. `. A* o" k5 q' [' n6 |

3 P& z- g9 F8 L- ]# curl -O http://www.linux.com/hello.sh2 n5 l2 F6 {, e
3、测试网页返回值
5 {$ k' z: n1 c$ K7 ^2 C( u. {! T" W7 ?, u
# curl -o /dev/null -s -w %{http_code} www.linux.com
$ i- \! x9 U  x; Q3 q& u- kPs:在脚本中,这是很常见的测试网站是否正常的用法
. c: F: r7 W2 s
: a" J- ~8 |) f9 _+ G1 Y3 f  w4、指定proxy服务器以及其端口
2 U, t" M; V- f+ U很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理5 _4 q6 h3 z; c: ^
/ \6 A% x8 L( \5 Z) W; h
# curl -x 192.168.100.100:1080 http://www.linux.com
$ Z: n" D) U& f  D: H5、cookie$ V8 Q/ q: e  o' J3 O2 y
有些网站是使用cookie来记录session信息。对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookie& c7 R" D2 E5 v% y- A( f9 f+ H
5.1:保存http的response里面的cookie信息。内置option:-c(小写)
; L! U% j/ l# m' Z
* B' S+ V* a3 k( k# curl -c cookiec.txt  http://www.linux.com- q' T* L7 x' k  ]
执行后cookie信息就被存到了cookiec.txt里面了0 _* j7 U+ t7 V  |$ x5 e0 {4 t

+ Q. A5 J5 q) y0 v5.2:保存http的response里面的header信息。内置option: -D- L: V3 Y5 U- b, {! k" S0 Y

8 t7 J  L' J  M8 [, M% d5 x# curl -D cookied.txt http://www.linux.com' x: [2 V2 e; X7 X  l/ E
执行后cookie信息就被存到了cookied.txt里面了
- L% P! r, Z3 t/ |* E
+ ^1 B' i) H) x, ~注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。
3 ^% v$ @+ {8 M- a; T0 }3 A/ i- o9 @# W3 q
; T! a* h+ v5 h6 f- U- \
5.3:使用cookie
5 `& q7 _5 D8 ~& E) t9 t8 R# b很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息。内置option: -b
, B' @: h/ N6 @" z5 Y( ^; K( {1 h' J& }) j+ J, J/ [! Y- k
# curl -b cookiec.txt http://www.linux.com% ]5 o- `# J  ~( `8 O) E% A/ P
6、模仿浏览器
" s$ W) D. W- }% W# l6 V有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站# [* o2 y* z! \& `
, i" d8 E. ?5 P' J# E! A
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
" A( A1 r4 ?6 p  N4 N这样服务器端就会认为是使用IE8.0去访问的
! K; Q3 \9 R% F$ m
4 O- Q- o8 o! a9 ~4 @$ }2 C7、伪造referer(盗链)
3 o# W3 c8 }8 L4 E' U很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了* u$ G0 `3 z/ t0 P# E+ x  G8 Y% ?( U
curl中内置option:-e可以让我们设定referer( U/ d% d6 S3 n8 G; M

2 a$ b, @. t. ^; r0 M# curl -e "www.linux.com" http://mail.linux.com
# _! z: ^! D$ L7 \+ K- d这样就会让服务器其以为你是从www.linux.com点击某个链接过来的
# U  V$ f5 P6 S
% R6 \) w! s, V6 w! h- k  T2 E8、下载文件# ?2 o% R1 l$ n$ u/ L" ]
8.1:利用curl下载文件。, j+ I4 ?$ D( n: ?7 X- W) p
#使用内置option:-o(小写)" y: D7 S/ N3 R2 R

# P8 E, v# v9 J3 q& f# curl -o dodo1.jpg http:$ B, q$ m! a: [& Q# e5 P) b
#使用内置option:-O(大写)
& `4 K7 J, U+ o# k2 K: t" t
: a! ~" x, B0 T: D( c# curl -O / s% @9 u/ ?9 H
这样就会以服务器上的名称保存文件到本地
4 @  ?* D+ U; [& F; d- |1 J7 r5 ^  p4 I8 T6 ^/ D
8.2:循环下载
$ G' N. t% p1 P有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样, ]5 d% g3 f7 e2 G, p7 q
: D- B# U  u1 J
# curl -O http://www.linux.com/dodo[1-5].JPG$ ]( M) N( T% n; V9 D! |
这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来' t8 C6 @/ h$ C& I
: [/ ?6 F) w+ o" v8 r
8.3:下载重命名8 T) a- l/ I- V: i% T% i
! ?9 m  d2 H% E  ?2 X" A
# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG. e- v7 f  G9 m/ ]' o5 V
由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。
% q5 Z) J. w* A. [+ s- Y# {* k2 @2 i5 ?9 }1 `# U% f4 U1 ?
# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
& g) m* y$ t/ J这样在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖
* }' k: U8 [$ r, O7 w$ X: ^- \7 w
8.4:分块下载
) _2 K: D3 S2 S. X7 ?2 b有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置option:-r& j6 {# ~, Y! X" `' x0 C
1 x# {7 _) a2 G  b1 Z& V& b) _
# curl -r 0-100 -o dodo1_part1.JPG
$ r! Z( y( P  C2 j# B) i/ g# curl -r 100-200 -o dodo1_part2.JPG " y) h& o) l0 e. O, i
# curl -r 200- -o dodo1_part3.JPG
2 \8 a; k" ~$ d1 Q/ g# cat dodo1_part* > dodo1.JPG
# n/ L) Y9 w+ f: s7 M$ `这样就可以查看dodo1.JPG的内容了/ v7 c0 K1 t$ Z4 V5 Z
+ N/ V' |$ i) V6 b
8.5:通过ftp下载文件/ g1 Y1 \2 y: `- p9 g( h% S+ e
curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法. ?+ E4 S* f# I& f! G
' R8 C) x# D) e  C  G( G1 F) m
# curl -O -u 用户名:密码
3 e/ `/ s* _& E. D; c0 k* f* ~# curl -O ftp://用户名:密码@
7 M1 L% c3 A) U8 s1 n8.6:显示下载进度条* T* m/ {1 ^' @7 d0 V0 U

8 R. |3 I. U  r2 W8 o3 |6 F# curl -# -O
5 F5 B4 X% ^8 V7 T# }8.7:不会显示下载进度信息
# g& F' E7 o  y2 r/ [2 E- F7 l5 S+ e5 R1 G
# curl -s -O + z! D+ H8 b+ P0 K' q2 ~
9、断点续传
  `  N; T6 m' z+ |在windows中,我们可以使用迅雷这样的软件进行断点续传。curl可以通过内置option:-C同样可以达到相同的效果8 [; ~" y" w4 t% N
如果在下载dodo1.JPG的过程中突然掉线了,可以使用以下的方式续传! q4 p% }" C0 F5 s; t% _7 a

# u+ _2 H2 D4 s" W. K; Y2 a# curl -C -O $ Y5 Q3 b, ?5 Q
10、上传文件3 l. U1 ]4 P1 X: @- a* q  j
curl不仅仅可以下载文件,还可以上传文件。通过内置option:-T来实现3 ~" I+ }9 F9 c3 S

4 g, L% ~0 q2 e" |) E/ R# curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/& B$ J9 f. O' Z$ P0 L
这样就向ftp服务器上传了文件dodo1.JPG
4 e& D& J! W; {( j4 b( y* o- A2 O$ D1 E+ {+ F; U+ X6 r4 D
11、显示抓取错误' y5 ^+ B. m) z; v: g/ L9 C4 f, l, y

7 U2 _8 s  Q! \& t; v9 \; L" |# curl -f http://www.linux.com/error
$ C8 [$ W. P2 _1 o+ s, ]; X其他参数(此处翻译为转载):; K- B; t7 Y' @, W: }: s2 I
! n) \8 b2 ?- |, B" p. `* R- A
复制代码
) |5 a8 R% o0 A3 m) K9 I复制代码
( p: C6 g+ L8 U/ X9 W9 e-a/--append                        上传文件时,附加到目标文件
0 C1 r! F' I0 V% U; m8 i3 \--anyauth                            可以使用“任何”身份验证方法
  _! Q  F& e) ]5 y--basic                                使用HTTP基本验证
- [4 \( ?  j% _4 M7 H" A-B/--use-ascii                      使用ASCII文本传输
! X5 R2 {+ H$ f! M. T-d/--data <data>                  HTTP POST方式传送数据
# o* W9 D! }, N% J8 F" g# \, Y--data-ascii <data>            以ascii的方式post数据, U) G, Q/ B: K# w% f1 C
--data-binary <data>          以二进制的方式post数据
, `" F: t/ K) V+ ]" ~--negotiate                          使用HTTP身份验证
/ p' C: X7 o( g: M4 ]0 @7 Z* u--digest                        使用数字身份验证
; i- k  k" A9 T3 r" h+ y- _4 K--disable-eprt                  禁止使用EPRT或LPRT
# U/ w* Z! f, D--disable-epsv                  禁止使用EPSV' m# ]. c8 l5 g! {
--egd-file <file>              为随机数据(SSL)设置EGD socket路径% p, b0 V6 \' D& w
--tcp-nodelay                  使用TCP_NODELAY选项& m- \7 W4 Q( v
-E/--cert <cert[:passwd]>      客户端证书文件和密码 (SSL)
! x: e# i" _2 O; T+ [+ n--cert-type <type>              证书文件类型 (DER/PEM/ENG) (SSL)' V8 v  r# Z6 m! K+ c$ n# `6 S
--key <key>                    私钥文件名 (SSL)7 q) I  Y( f1 Y0 ~, Y7 g' h( h
--key-type <type>              私钥文件类型 (DER/PEM/ENG) (SSL)/ X" t+ c; q' X
--pass  <pass>                  私钥密码 (SSL), B3 [! ~0 m' p8 R, O( G! K
--engine <eng>                  加密引擎使用 (SSL). "--engine list" for list
# ~1 u9 A0 l" \! \& p8 j! p. \--cacert <file>                CA证书 (SSL)0 Z! K1 y, Y0 f1 m
--capath <directory>            CA目   (made using c_rehash) to verify peer against (SSL)7 l$ Y& p! }6 o, y+ s* x
--ciphers <list>                SSL密码& o0 ]/ _  v5 W8 o5 N" G
--compressed                    要求返回是压缩的形势 (using deflate or gzip)( _- g6 }2 @2 F
--connect-timeout <seconds>    设置最大请求时间; C7 i, I4 M7 g% G0 x
--create-dirs                  建立本地目录的目录层次结构4 w9 k8 ^2 K. \6 M8 ]: ?7 _
--crlf                          上传是把LF转变成CRLF
: w1 n0 u/ P9 Y3 v/ Z7 h; p--ftp-create-dirs              如果远程目录不存在,创建远程目录% |$ k# }4 ^+ ^0 c
--ftp-method [multicwd/nocwd/singlecwd]    控制CWD的使用' B; V. E$ F* w
--ftp-pasv                      使用 PASV/EPSV 代替端口
  S8 R$ R$ E' y0 p- ^! t8 Y: \--ftp-skip-pasv-ip              使用PASV的时候,忽略该IP地址
, k4 P7 I! Q& A* [5 ^- b/ J6 W. i--ftp-ssl                      尝试用 SSL/TLS 来进行ftp数据传输3 ~, N1 g2 _8 c. h& m
--ftp-ssl-reqd                  要求用 SSL/TLS 来进行ftp数据传输3 N( ?! a1 t' D
-F/--form <name=content>        模拟http表单提交数据/ C/ S: q3 R2 o' C
-form-string <name=string>      模拟http表单提交数据
+ p8 Y" H( V1 u5 c9 T- v  B0 I8 n-g/--globoff                    禁用网址序列和范围使用{}和[]
# V' r& O# e5 s2 V: J* h" Y-G/--get                        以get的方式来发送数据2 M8 B8 F) d% d4 B; C( c& p) m
-h/--help                      帮助7 ?4 G# i4 x6 q
-H/--header <line>              自定义头信息传递给服务器
5 y+ P. c4 N1 Z0 m0 q--ignore-content-length        忽略的HTTP头信息的长度: n% B( z& `( S
-i/--include                    输出时包括protocol头信息. J( G4 B0 |8 [" V/ n! [: y
-I/--head                      只显示文档信息2 u3 D( {' v! Z' ~/ N
-j/--junk-session-cookies      读取文件时忽略session cookie( Z, s  H7 d$ K0 P/ _
--interface <interface>        使用指定网络接口/地址+ S* ~4 Y  ~% }+ ?2 i/ q% T7 m' k
--krb4 <level>                  使用指定安全级别的krb49 Q9 l3 A3 _, @: u. f1 U. x
-k/--insecure                  允许不使用证书到SSL站点
2 ]. e# j2 L$ l0 g! p-K/--config                    指定的配置文件读取
* x) a$ z, @0 {: w3 Y-l/--list-only                  列出ftp目录下的文件名称
& f. N+ J+ R  e  j--limit-rate <rate>            设置传输速度
9 z3 J, e. q- L9 Q--local-port<NUM>              强制使用本地端口号: J1 e% G% W$ q, g; r. v+ I
-m/--max-time <seconds>        设置最大传输时间) `5 n; q# w8 _# [9 f
--max-redirs <num>              设置最大读取的目录数5 T$ h7 b' Q6 F5 l; ]
--max-filesize <bytes>          设置最大下载的文件总量
8 g/ n  W; Z) @" J  a1 t-M/--manual                    显示全手动4 D2 F/ ]/ [7 N  M2 j
-n/--netrc                      从netrc文件中读取用户名和密码2 r" l# a0 X: }* I2 d, ]( w
--netrc-optional                使用 .netrc 或者 URL来覆盖-n' [  A$ u& F+ J+ Y# c
--ntlm                          使用 HTTP NTLM 身份验证
' C& x' F7 x/ W5 G$ G0 ~; e-N/--no-buffer                  禁用缓冲输出+ \7 k. [6 D% v; t% X
-p/--proxytunnel                使用HTTP代理
; S) u3 \' I! B--proxy-anyauth                选择任一代理身份验证方法
% U1 S3 J7 d  w--proxy-basic                  在代理上使用基本身份验证) I# }* a. H: [
--proxy-digest                  在代理上使用数字身份验证: \$ P) j4 p3 Y# t
--proxy-ntlm                    在代理上使用ntlm身份验证& O5 |5 N- e" b1 }/ M; o
-P/--ftp-port <address>        使用端口地址,而不是使用PASV- ]  j5 R7 F$ O4 @5 p5 |8 Y9 Q
-Q/--quote <cmd>                文件传输前,发送命令到服务器
6 r, h  j& k! B* y--range-file                    读取(SSL)的随机文件0 L5 v2 |8 [% m1 S- i
-R/--remote-time                在本地生成文件时,保留远程文件时间2 `0 x! I4 c7 ]9 T
--retry <num>                  传输出现问题时,重试的次数$ [7 z: }: b4 m1 N" D* Q- J) W
--retry-delay <seconds>        传输出现问题时,设置重试间隔时间: R1 p1 t1 |, F2 K' u3 n- {" B  X0 S
--retry-max-time <seconds>      传输出现问题时,设置最大重试时间/ `& k0 G, u0 c
-S/--show-error                显示错误
& G8 ]8 k, X( }1 k: P--socks4 <host[:port]>          用socks4代理给定主机和端口: ]- d! [6 c+ v( y+ E
--socks5 <host[:port]>          用socks5代理给定主机和端口& T- {* w+ g, }* \: V
-t/--telnet-option <OPT=val>    Telnet选项设置
- T6 j' P' K2 w& c3 V2 s--trace <file>                  对指定文件进行debug, C3 o- c1 d! k
--trace-ascii <file>            Like --跟踪但没有hex输出
/ s- w+ F* o$ D" q+ c% E--trace-time                    跟踪/详细输出时,添加时间戳1 B9 \8 G; ~3 a1 q
--url <URL>                    Spet URL to work with
7 `* D% o& F8 K-U/--proxy-user <user[:password]>  设置代理用户名和密码9 H: V. B3 y: ^) R) t4 w) n
-V/--version                    显示版本信息, s/ V8 U% n" K, d+ m. Z. f9 M
-X/--request <command>          指定什么命令
  i9 n" S) e8 L( q1 R5 Q5 A# I/ `-y/--speed-time                放弃限速所要的时间。默认为30
* }9 O) R5 C0 P& U0 O; W" S) K" t-Y/--speed-limit                停止传输速度的限制,速度时间'秒
: o7 C" @# h% c' U+ m6 z' h-z/--time-cond                  传送时间设置* W. z" ^! q* v$ U1 k
-0/--http1.0                    使用HTTP 1.03 A2 O) o+ Z4 N+ \& c* j& a% E* q
-1/--tlsv1                      使用TLSv1(SSL)
5 Z9 p2 o) I+ H% F-2/--sslv2                      使用SSLv2的(SSL)3 k# r2 @/ q2 Q8 y3 g
-3/--sslv3                      使用的SSLv3(SSL)* I; V. K- P8 S" E$ j
--3p-quote                      like -Q for the source URL for 3rd party transfer
$ x8 Z1 F( l6 d# x1 |; M. |--3p-url                        使用url,进行第三方传送1 `8 Q- [) G, _% g2 ]
--3p-user                      使用用户名和密码,进行第三方传送
) r5 P0 j, f, @  F/ n-4/--ipv4                      使用IP4; Y" w% H1 W: ]* }) m0 P% s2 ?) g
-6/--ipv6                      使用IP6
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 04:26 , Processed in 0.020267 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表