• linux 命令curl`详解


    一、curl 介绍

    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出stdout上面;
    可以用它来构造http request报文,curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输;
    支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),
    curl设计为无用户交互下完成工作;
    curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传等;
    在很多的操作系统中被使用,其中包括Unix、和Linux,除此之外,也有DOS和Win64等的版本。

    二、常见功能

    2.1、查看网页源码

    直接在 curl 命令后加上网址,就可以看到网页源码。以网址www.baidu.com为例(选择该网址,主要因为它的网页代码较短)。

    $ curl www.baidu.com 
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> 

    关于百度 About Baidu

    ©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

    • 1
    • 2
    • 3

    如果要把这个网页保存下来,可以使用 -o 参数:

    $ curl -o /iso2/gyy/tmp/baidu.txt www.baidu.com
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2381  100  2381    0     0  12767      0 --:--:-- --:--:-- --:--:-- 12732
    
    
    $ cat baidu.txt 
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> 

    关于百度 About Baidu

    ©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2、自动跳转

    有的网址是自动跳转的。使用 -L 参数,curl 就会跳转到新的网址。

    $ curl -L www.sina.com
    
    • 1

    键入上面的命令,结果自动跳转为 www.sina.com.cn

    2.3、显示头信息

    -i 参数可以显示 http response 的头信息,连同网页代码一起。-I 参数则只显示 http response 的头信息。

    $ curl -i  www.baidu.com 
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: keep-alive
    Content-Length: 2381
    Content-Type: text/html
    Date: Mon, 14 Nov 2022 06:06:56 GMT
    Etag: "588604c8-94d"
    Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
    Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> 

    关于百度 About Baidu

    ©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    curl -I  www.baidu.com 
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: keep-alive
    Content-Length: 277
    Content-Type: text/html
    Date: Mon, 14 Nov 2022 06:07:34 GMT
    Etag: "575e1f60-115"
    Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.4、显示通信过程

    -v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

    $ curl -v  www.baidu.com 
    * About to connect() to www.baidu.com port 80 (#0)
    *   Trying 180.101.49.14...
    * Connected to www.baidu.com (180.101.49.14) port 80 (#0)
    > GET / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: www.baidu.com
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    < Connection: keep-alive
    < Content-Length: 2381
    < Content-Type: text/html
    < Date: Mon, 14 Nov 2022 06:11:11 GMT
    < Etag: "588604c8-94d"
    < Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
    < Pragma: no-cache
    < Server: bfe/1.0.8.18
    < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    < 
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> 

    关于百度 About Baidu

    ©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

    * Connection #0 to host www.baidu.com left intact
    • 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

    如果觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。

    $ curl --trace output.txt www.baidu.com 
    
    $ cat output.txt 
    == Info: About to connect() to www.baidu.com port 80 (#0)
    == Info:   Trying 180.101.49.14...
    == Info: Connected to www.baidu.com (180.101.49.14) port 80 (#0)
    => Send header, 77 bytes (0x4d)
    0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1..
    0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl
    0020: 2f 37 2e 32 39 2e 30 0d 0a 48 6f 73 74 3a 20 77 /7.29.0..Host: w
    0030: 77 77 2e 62 61 69 64 75 2e 63 6f 6d 0d 0a 41 63 ww.baidu.com..Ac
    0040: 63 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a          cept: */*....
    <= Recv header, 17 bytes (0x11)
    0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
    0010: 0a                                              .
    <= Recv header, 22 bytes (0x16)
    0000: 41 63 63 65 70 74 2d 52 61 6e 67 65 73 3a 20 62 Accept-Ranges: b
    0010: 79 74 65 73 0d 0a                               ytes..
    <= Recv header, 76 bytes (0x4c)
    0000: 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 70 Cache-Control: p
    0010: 72 69 76 61 74 65 2c 20 6e 6f 2d 63 61 63 68 65 rivate, no-cache
    0020: 2c 20 6e 6f 2d 73 74 6f 72 65 2c 20 70 72 6f 78 , no-store, prox
    0030: 79 2d 72 65 76 61 6c 69 64 61 74 65 2c 20 6e 6f y-revalidate, no
    0040: 2d 74 72 61 6e 73 66 6f 72 6d 0d 0a             -transform..
    <= Recv header, 24 bytes (0x18)
    0000: 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 Connection: keep
    0010: 2d 61 6c 69 76 65 0d 0a                         -alive..
    <= Recv header, 22 bytes (0x16)
    0000: 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 Content-Length: 
    0010: 32 33 38 31 0d 0a                               2381..
    <= Recv header, 25 bytes (0x19)
    0000: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 Content-Type: te
    0010: 78 74 2f 68 74 6d 6c 0d 0a                      xt/html..
    <= Recv header, 37 bytes (0x25)
    0000: 44 61 74 65 3a 20 4d 6f 6e 2c 20 31 34 20 4e 6f Date: Mon, 14 No
    0010: 76 20 32 30 32 32 20 30 36 3a 31 32 3a 34 35 20 v 2022 06:12:45 
    0020: 47 4d 54 0d 0a                                  GMT..
    <= Recv header, 22 bytes (0x16)
    0000: 45 74 61 67 3a 20 22 35 38 38 36 30 34 63 38 2d Etag: "588604c8-
    0010: 39 34 64 22 0d 0a                               94d"..
    <= Recv header, 46 bytes (0x2e)
    0000: 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 3a 20 4d Last-Modified: M
    0010: 6f 6e 2c 20 32 33 20 4a 61 6e 20 32 30 31 37 20 on, 23 Jan 2017 
    0020: 31 33 3a 32 37 3a 33 36 20 47 4d 54 0d 0a       13:27:36 GMT..
    <= Recv header, 18 bytes (0x12)
    0000: 50 72 61 67 6d 61 3a 20 6e 6f 2d 63 61 63 68 65 Pragma: no-cache
    0010: 0d 0a                                           ..
    <= Recv header, 22 bytes (0x16)
    0000: 53 65 72 76 65 72 3a 20 62 66 65 2f 31 2e 30 2e Server: bfe/1.0.
    0010: 38 2e 31 38 0d 0a                               8.18..
    <= Recv header, 67 bytes (0x43)
    0000: 53 65 74 2d 43 6f 6f 6b 69 65 3a 20 42 44 4f 52 Set-Cookie: BDOR
    0010: 5a 3d 32 37 33 31 35 3b 20 6d 61 78 2d 61 67 65 Z=27315; max-age
    0020: 3d 38 36 34 30 30 3b 20 64 6f 6d 61 69 6e 3d 2e =86400; domain=.
    0030: 62 61 69 64 75 2e 63 6f 6d 3b 20 70 61 74 68 3d baidu.com; path=
    0040: 2f 0d 0a                                        /..
    <= Recv header, 2 bytes (0x2)
    0000: 0d 0a                                           ..
    <= Recv data, 2381 bytes (0x94d)
    0000: 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0d <!DOCTYPE html>.
    0010: 0a 3c 21 2d 2d 53 54 41 54 55 53 20 4f 4b 2d 2d .<!--STATUS OK--
    0020: 3e 3c 68 74 6d 6c 3e 20 3c 68 65 61 64 3e 3c 6d ><html> <head><m
    0030: 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 63 eta http-equiv=c
    0040: 6f 6e 74 65 6e 74 2d 74 79 70 65 20 63 6f 6e 74 ontent-type cont
    0050: 65 6e 74 3d 74 65 78 74 2f 68 74 6d 6c 3b 63 68 ent=text/html;ch
    0060: 61 72 73 65 74 3d 75 74 66 2d 38 3e 3c 6d 65 74 arset=utf-8><met
    0070: 61 20 68 74 74 70 2d 65 71 75 69 76 3d 58 2d 55 a http-equiv=X-U
    0080: 41 2d 43 6f 6d 70 61 74 69 62 6c 65 20 63 6f 6e A-Compatible con
    0090: 74 65 6e 74 3d 49 45 3d 45 64 67 65 3e 3c 6d 65 tent=IE=Edge><me
    00a0: 74 61 20 63 6f 6e 74 65 6e 74 3d 61 6c 77 61 79 ta content=alway
    00b0: 73 20 6e 61 6d 65 3d 72 65 66 65 72 72 65 72 3e s name=referrer>
    00c0: 3c 6c 69 6e 6b 20 72 65 6c 3d 73 74 79 6c 65 73 <link rel=styles
    00d0: 68 65 65 74 20 74 79 70 65 3d 74 65 78 74 2f 63 heet type=text/c
    00e0: 73 73 20 68 72 65 66 3d 68 74 74 70 3a 2f 2f 73 ss href=http://s
    00f0: 31 2e 62 64 73 74 61 74 69 63 2e 63 6f 6d 2f 72 1.bdstatic.com/r
    0100: 2f 77 77 77 2f 63 61 63 68 65 2f 62 64 6f 72 7a /www/cache/bdorz
    0110: 2f 62 61 69 64 75 2e 6d 69 6e 2e 63 73 73 3e 3c /baidu.min.css><
    0120: 74 69 74 6c 65 3e e7 99 be e5 ba a6 e4 b8 80 e4 title>..........
    0130: b8 8b ef bc 8c e4 bd a0 e5 b0 b1 e7 9f a5 e9 81 ................
    0140: 93 3c 2f 74 69 74 6c 65 3e 3c 2f 68 65 61 64 3e .</title></head>
    0150: 20 3c 62 6f 64 79 20 6c 69 6e 6b 3d 23 30 30 30  <body link=#000
    0160: 30 63 63 3e 20 3c 64 69 76 20 69 64 3d 77 72 61 0cc> <div id=wra
    0170: 70 70 65 72 3e 20 3c 64 69 76 20 69 64 3d 68 65 pper> <div id=he
    0180: 61 64 3e 20 3c 64 69 76 20 63 6c 61 73 73 3d 68 ad> <div class=h
    0190: 65 61 64 5f 77 72 61 70 70 65 72 3e 20 3c 64 69 ead_wrapper> <di
    01a0: 76 20 63 6c 61 73 73 3d 73 5f 66 6f 72 6d 3e 20 v class=s_form> 
    01b0: 3c 64 69 76 20 63 6c 61 73 73 3d 73 5f 66 6f 72 <div class=s_for
    01c0: 6d 5f 77 72 61 70 70 65 72 3e 20 3c 64 69 76 20 m_wrapper> <div 
    01d0: 69 64 3d 6c 67 3e 20 3c 69 6d 67 20 68 69 64 65 id=lg> <img hide
    01e0: 66 6f 63 75 73 3d 74 72 75 65 20 73 72 63 3d 2f focus=true src=/
    01f0: 2f 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f 69 /www.baidu.com/i
    0200: 6d 67 2f 62 64 5f 6c 6f 67 6f 31 2e 70 6e 67 20 mg/bd_logo1.png 
    0210: 77 69 64 74 68 3d 32 37 30 20 68 65 69 67 68 74 width=270 height
    0220: 3d 31 32 39 3e 20 3c 2f 64 69 76 3e 20 3c 66 6f =129> </div> <fo
    0230: 72 6d 20 69 64 3d 66 6f 72 6d 20 6e 61 6d 65 3d rm id=form name=
    0240: 66 20 61 63 74 69 6f 6e 3d 2f 2f 77 77 77 2e 62 f action=//www.b
    0250: 61 69 64 75 2e 63 6f 6d 2f 73 20 63 6c 61 73 73 aidu.com/s class
    0260: 3d 66 6d 3e 20 3c 69 6e 70 75 74 20 74 79 70 65 =fm> <input type
    0270: 3d 68 69 64 64 65 6e 20 6e 61 6d 65 3d 62 64 6f =hidden name=bdo
    0280: 72 7a 5f 63 6f 6d 65 20 76 61 6c 75 65 3d 31 3e rz_come value=1>
    0290: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 68 69 64  <input type=hid
    02a0: 64 65 6e 20 6e 61 6d 65 3d 69 65 20 76 61 6c 75 den name=ie valu
    02b0: 65 3d 75 74 66 2d 38 3e 20 3c 69 6e 70 75 74 20 e=utf-8> <input 
    02c0: 74 79 70 65 3d 68 69 64 64 65 6e 20 6e 61 6d 65 type=hidden name
    02d0: 3d 66 20 76 61 6c 75 65 3d 38 3e 20 3c 69 6e 70 =f value=8> <inp
    02e0: 75 74 20 74 79 70 65 3d 68 69 64 64 65 6e 20 6e ut type=hidden n
    02f0: 61 6d 65 3d 72 73 76 5f 62 70 20 76 61 6c 75 65 ame=rsv_bp value
    0300: 3d 31 3e 20 3c 69 6e 70 75 74 20 74 79 70 65 3d =1> <input type=
    0310: 68 69 64 64 65 6e 20 6e 61 6d 65 3d 72 73 76 5f hidden name=rsv_
    0320: 69 64 78 20 76 61 6c 75 65 3d 31 3e 20 3c 69 6e idx value=1> <in
    0330: 70 75 74 20 74 79 70 65 3d 68 69 64 64 65 6e 20 put type=hidden 
    0340: 6e 61 6d 65 3d 74 6e 20 76 61 6c 75 65 3d 62 61 name=tn value=ba
    0350: 69 64 75 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d idu><span class=
    0360: 22 62 67 20 73 5f 69 70 74 5f 77 72 22 3e 3c 69 "bg s_ipt_wr"><i
    0370: 6e 70 75 74 20 69 64 3d 6b 77 20 6e 61 6d 65 3d nput id=kw name=
    0380: 77 64 20 63 6c 61 73 73 3d 73 5f 69 70 74 20 76 wd class=s_ipt v
    0390: 61 6c 75 65 20 6d 61 78 6c 65 6e 67 74 68 3d 32 alue maxlength=2
    03a0: 35 35 20 61 75 74 6f 63 6f 6d 70 6c 65 74 65 3d 55 autocomplete=
    03b0: 6f 66 66 20 61 75 74 6f 66 6f 63 75 73 3e 3c 2f off autofocus></
    03c0: 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 span><span class
    03d0: 3d 22 62 67 20 73 5f 62 74 6e 5f 77 72 22 3e 3c ="bg s_btn_wr"><
    03e0: 69 6e 70 75 74 20 74 79 70 65 3d 73 75 62 6d 69 input type=submi
    03f0: 74 20 69 64 3d 73 75 20 76 61 6c 75 65 3d e7 99 t id=su value=..
    0400: be e5 ba a6 e4 b8 80 e4 b8 8b 20 63 6c 61 73 73 .......... class
    0410: 3d 22 62 67 20 73 5f 62 74 6e 22 3e 3c 2f 73 70 ="bg s_btn"></sp
    0420: 61 6e 3e 20 3c 2f 66 6f 72 6d 3e 20 3c 2f 64 69 an> </form> </di
    0430: 76 3e 20 3c 2f 64 69 76 3e 20 3c 64 69 76 20 69 v> </div> <div i
    0440: 64 3d 75 31 3e 20 3c 61 20 68 72 65 66 3d 68 74 d=u1> <a href=ht
    0450: 74 70 3a 2f 2f 6e 65 77 73 2e 62 61 69 64 75 2e tp://news.baidu.
    0460: 63 6f 6d 20 6e 61 6d 65 3d 74 6a 5f 74 72 6e 65 com name=tj_trne
    0470: 77 73 20 63 6c 61 73 73 3d 6d 6e 61 76 3e e6 96 ws class=mnav>..
    0480: b0 e9 97 bb 3c 2f 61 3e 20 3c 61 20 68 72 65 66 ....</a> <a href
    0490: 3d 68 74 74 70 3a 2f 2f 77 77 77 2e 68 61 6f 31 =http://www.hao1
    04a0: 32 33 2e 63 6f 6d 20 6e 61 6d 65 3d 74 6a 5f 74 23.com name=tj_t
    04b0: 72 68 61 6f 31 32 33 20 63 6c 61 73 73 3d 6d 6e rhao123 class=mn
    04c0: 61 76 3e 68 61 6f 31 32 33 3c 2f 61 3e 20 3c 61 av>hao123</a> <a
    04d0: 20 68 72 65 66 3d 68 74 74 70 3a 2f 2f 6d 61 70  href=http://map
    04e0: 2e 62 61 69 64 75 2e 63 6f 6d 20 6e 61 6d 65 3d .baidu.com name=
    04f0: 74 6a 5f 74 72 6d 61 70 20 63 6c 61 73 73 3d 6d tj_trmap class=m
    0500: 6e 61 76 3e e5 9c b0 e5 9b be 3c 2f 61 3e 20 3c nav>......</a> <
    0510: 61 20 68 72 65 66 3d 68 74 74 70 3a 2f 2f 76 2e a href=http://v.
    0520: 62 61 69 64 75 2e 63 6f 6d 20 6e 61 6d 65 3d 74 baidu.com name=t
    0530: 6a 5f 74 72 76 69 64 65 6f 20 63 6c 61 73 73 3d j_trvideo class=
    0540: 6d 6e 61 76 3e e8 a7 86 e9 a2 91 3c 2f 61 3e 20 mnav>......</a> 
    0550: 3c 61 20 68 72 65 66 3d 68 74 74 70 3a 2f 2f 74 <a href=http://t
    0560: 69 65 62 61 2e 62 61 69 64 75 2e 63 6f 6d 20 6e ieba.baidu.com n
    0570: 61 6d 65 3d 74 6a 5f 74 72 74 69 65 62 61 20 63 ame=tj_trtieba c
    0580: 6c 61 73 73 3d 6d 6e 61 76 3e e8 b4 b4 e5 90 a7 lass=mnav>......
    0590: 3c 2f 61 3e 20 3c 6e 6f 73 63 72 69 70 74 3e 20 </a> <noscript> 
    05a0: 3c 61 20 68 72 65 66 3d 68 74 74 70 3a 2f 2f 77 <a href=http://w
    05b0: 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f 62 64 6f ww.baidu.com/bdo
    05c0: 72 7a 2f 6c 6f 67 69 6e 2e 67 69 66 3f 6c 6f 67 rz/login.gif?log
    05d0: 69 6e 26 61 6d 70 3b 74 70 6c 3d 6d 6e 26 61 6d in&amp;tpl=mn&am
    05e0: 70 3b 75 3d 68 74 74 70 25 33 41 25 32 46 25 32 p;u=http%3A%2F%2
    05f0: 46 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 25 32 Fwww.baidu.com%2
    0600: 66 25 33 66 62 64 6f 72 7a 5f 63 6f 6d 65 25 33 f%3fbdorz_come%3
    0610: 64 31 20 6e 61 6d 65 3d 74 6a 5f 6c 6f 67 69 6e d1 name=tj_login
    0620: 20 63 6c 61 73 73 3d 6c 62 3e e7 99 bb e5 bd 95  class=lb>......
    0630: 3c 2f 61 3e 20 3c 2f 6e 6f 73 63 72 69 70 74 3e </a> </noscript>
    0640: 20 3c 73 63 72 69 70 74 3e 64 6f 63 75 6d 65 6e  <script>documen
    0650: 74 2e 77 72 69 74 65 28 27 3c 61 20 68 72 65 66 t.write('52 49 43 6f 6d 70 6f 6e 65 6e 74 28 77 69 6e 64 RIComponent(wind
    06b0: 6f 77 2e 6c 6f 63 61 74 69 6f 6e 2e 68 72 65 66 ow.location.href
    06c0: 2b 20 28 77 69 6e 64 6f 77 2e 6c 6f 63 61 74 69 + (window.locati
    06d0: 6f 6e 2e 73 65 61 72 63 68 20 3d 3d 3d 20 22 22 on.search === ""
    06e0: 20 3f 20 22 3f 22 20 3a 20 22 26 22 29 2b 20 22  ? "?" : "&")+ "
    06f0: 62 64 6f 72 7a 5f 63 6f 6d 65 3d 31 22 29 2b 20 bdorz_come=1")+ 
    0700: 27 22 20 6e 61 6d 65 3d 22 74 6a 5f 6c 6f 67 69 '" name="tj_logi
    0710: 6e 22 20 63 6c 61 73 73 3d 22 6c 62 22 3e e7 99 n" class="lb">..
    0720: bb e5 bd 95 3c 2f 61 3e 27 29 3b 3c 2f 73 63 72 ....');</scr
    0730: 69 70 74 3e 20 3c 61 20 68 72 65 66 3d 2f 2f 77 ipt> <a href=//w
    0740: 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f 6d 6f 72 ww.baidu.com/mor
    0750: 65 2f 20 6e 61 6d 65 3d 74 6a 5f 62 72 69 69 63 e/ name=tj_briic
    0760: 6f 6e 20 63 6c 61 73 73 3d 62 72 69 20 73 74 79 on class=bri sty
    0770: 6c 65 3d 22 64 69 73 70 6c 61 79 3a 20 62 6c 6f le="display: blo
    0780: 63 6b 3b 22 3e e6 9b b4 e5 a4 9a e4 ba a7 e5 93 ck;">...........
    0790: 81 3c 2f 61 3e 20 3c 2f 64 69 76 3e 20 3c 2f 64 .</a> </div> </d
    07a0: 69 76 3e 20 3c 2f 64 69 76 3e 20 3c 64 69 76 20 iv> </div> <div 
    07b0: 69 64 3d 66 74 43 6f 6e 3e 20 3c 64 69 76 20 69 id=ftCon> <div i
    07c0: 64 3d 66 74 43 6f 6e 77 3e 20 3c 70 20 69 64 3d d=ftConw> <p id=
    07d0: 6c 68 3e 20 3c 61 20 68 72 65 66 3d 68 74 74 70 lh> <a href=http
    07e0: 3a 2f 2f 68 6f 6d 65 2e 62 61 69 64 75 2e 63 6f ://home.baidu.co
    07f0: 6d 3e e5 85 b3 e4 ba 8e e7 99 be e5 ba a6 3c 2f m>............</
    0800: 61 3e 20 3c 61 20 68 72 65 66 3d 68 74 74 70 3a a> <a href=http:
    0810: 2f 2f 69 72 2e 62 61 69 64 75 2e 63 6f 6d 3e 41 //ir.baidu.com>A
    0820: 62 6f 75 74 20 42 61 69 64 75 3c 2f 61 3e 20 3c bout Baidu</a> <
    0830: 2f 70 3e 20 3c 70 20 69 64 3d 63 70 3e 26 63 6f /p> <p id=cp>&co
    0840: 70 79 3b 32 30 31 37 26 6e 62 73 70 3b 42 61 69 py;2017&nbsp;Bai
    0850: 64 75 26 6e 62 73 70 3b 3c 61 20 68 72 65 66 3d du&nbsp;<a href=
    0860: 68 74 74 70 3a 2f 2f 77 77 77 2e 62 61 69 64 75 http://www.baidu
    0870: 2e 63 6f 6d 2f 64 75 74 79 2f 3e e4 bd bf e7 94 .com/duty/>.....
    0880: a8 e7 99 be e5 ba a6 e5 89 8d e5 bf 85 e8 af bb ................
    0890: 3c 2f 61 3e 26 6e 62 73 70 3b 20 3c 61 20 68 72 </a>&nbsp; <a hr
    08a0: 65 66 3d 68 74 74 70 3a 2f 2f 6a 69 61 6e 79 69 ef=http://jianyi
    08b0: 2e 62 61 69 64 75 2e 63 6f 6d 2f 20 63 6c 61 73 .baidu.com/ clas
    08c0: 73 3d 63 70 2d 66 65 65 64 62 61 63 6b 3e e6 84 s=cp-feedback>..
    08d0: 8f e8 a7 81 e5 8f 8d e9 a6 88 3c 2f 61 3e 26 6e ..........</a>&n
    08e0: 62 73 70 3b e4 ba ac 49 43 50 e8 af 81 30 33 30 bsp;...ICP...030
    08f0: 31 37 33 e5 8f b7 26 6e 62 73 70 3b 20 3c 69 6d 173...&nbsp; <im
    0900: 67 20 73 72 63 3d 2f 2f 77 77 77 2e 62 61 69 64 g src=//www.baid
    0910: 75 2e 63 6f 6d 2f 69 6d 67 2f 67 73 2e 67 69 66 u.com/img/gs.gif
    0920: 3e 20 3c 2f 70 3e 20 3c 2f 64 69 76 3e 20 3c 2f > </p> </div> </
    0930: 64 69 76 3e 20 3c 2f 64 69 76 3e 20 3c 2f 62 6f div> </div> </bo
    0940: 64 79 3e 20 3c 2f 68 74 6d 6c 3e 0d 0a          dy> </html>..
    == Info: Connection #0 to host www.baidu.com left intact
    
    • 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
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209

    或者

    $ curl --trace-ascii output.txt www.sina.com
    
    $ cat output1.txt 
    == Info: About to connect() to www.baidu.com port 80 (#0)
    == Info:   Trying 180.101.49.14...
    == Info: Connected to www.baidu.com (180.101.49.14) port 80 (#0)
    => Send header, 77 bytes (0x4d)
    0000: GET / HTTP/1.1
    0010: User-Agent: curl/7.29.0
    0029: Host: www.baidu.com
    003e: Accept: */*
    004b: 
    <= Recv header, 17 bytes (0x11)
    0000: HTTP/1.1 200 OK
    <= Recv header, 22 bytes (0x16)
    0000: Accept-Ranges: bytes
    <= Recv header, 76 bytes (0x4c)
    0000: Cache-Control: private, no-cache, no-store, proxy-revalidate, no
    0040: -transform
    <= Recv header, 24 bytes (0x18)
    0000: Connection: keep-alive
    <= Recv header, 22 bytes (0x16)
    0000: Content-Length: 2381
    <= Recv header, 25 bytes (0x19)
    0000: Content-Type: text/html
    <= Recv header, 37 bytes (0x25)
    0000: Date: Mon, 14 Nov 2022 06:14:28 GMT
    <= Recv header, 22 bytes (0x16)
    0000: Etag: "588604c8-94d"
    <= Recv header, 46 bytes (0x2e)
    0000: Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
    <= Recv header, 18 bytes (0x12)
    0000: Pragma: no-cache
    <= Recv header, 22 bytes (0x16)
    0000: Server: bfe/1.0.8.18
    <= Recv header, 67 bytes (0x43)
    0000: Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=
    0040: /
    <= Recv header, 2 bytes (0x2)
    0000: 
    <= Recv data, 1040 bytes (0x410)
    0000: <!DOCTYPE html>
    0011: <!--STATUS OK--><html> <head><meta http-equiv=content-type conte
    0051: nt=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible cont
    0091: ent=IE=Edge><meta content=always name=referrer><link rel=stylesh
    00d1: eet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/
    0111: baidu.min.css><title>...........................</title></head> 
    0151: <body link=#0000cc> 

    2.5、发送表单信息

    发送表单信息有 GET 和 POST 两种方法。GET 方法相对简单,只要把数据附在网址后面就行。

    $ curl example.com/form.cgi?data=xxx
    
    • 1

    POST 方法必须把数据和网址分开,curl 就要用到 --data 或者 -d 参数。

    $ curl -X POST --data "data=xxx" example.com/form.cgi
    curl -H "Content-Type: application/json" -X POST -d "{\"abc\":123}" "https://httpbin.org/post"
    
    • 1
    • 2

    json数据放在一个文件里

    curl -H "Content-Type: application/json" -X POST -d @test.json URL
    
    • 1

    如果你的数据没有经过表单编码,还可以让 curl 为你编码,参数是 --data-urlencode

    $ curl -X POST--data-urlencode "date=April 1" example.com/form.cgi
    
    • 1

    2.6、HTTP动词

    curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其他动词。

    $ curl -X POST www.example.com
    $ curl -X DELETE www.example.com
    
    • 1
    • 2

    2.7、User Agent字段

    这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。
    浏览器的 User Agent 是:

    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
    
    • 1

    curl 可以这样模拟:

    $ curl --user-agent "[User Agent]" [URL]
    
    • 1

    2.8、cookie

    使用 --cookie 参数,可以让 curl 发送 cookie。

    $ curl --cookie "name=xxx" www.example.com
    
    • 1

    至于具体的 cookie 的值,可以从 http response 头信息的 Set-Cookie 字段中得到。

    2.9、增加头信息

    有时需要在 http request 之中,自行增加一个头信息。--header 参数就可以起到这个作用。

    $ curl --header "Content-Type:application/json" http://example.com
    
    • 1

    2.10、HTTP认证

    有些网域需要 HTTP 认证,这时 curl 需要用到 --user 或者 -u 参数。

    $ curl --user name:password example.com
    
    • 1

    2.11、上传文件(option:-T)

    curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/
    
    • 1

    2.12、伪造来源页面|伪造referer|盗链 (option:-e)

    很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗链了,这样就会让服务器以为你是从www.linux.com点击某个链接过来的

    curl -e "www.linux.com" http://mail.linux.com
    #告诉爱E族,我是从百度来的
    curl -e http://baidu.com http://aiezu.com
    
    • 1
    • 2
    • 3

    2.13、伪造代理设备(模仿浏览器)

    有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站

    curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
    #告诉爱E族,我是GOOGLE爬虫蜘蛛(其实我是curl命令)
    curl -A " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://aiezu.com
    #告诉爱E族,我用的是微信内置浏览器
    curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.14、设置http请求指定proxy服务器以及其端口(option::-x)

    很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理

    curl -x 192.168.100.100:1080 http://www.linux.com
    
    • 1

    2.15、保存http的response里面的header信息(option:-D)

    curl -D cookied.txt http://www.linux.com
    
    • 1

    执行后cookie信息就被存到了cookied.txt里面了
    注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。

    2.16、显示抓取错误

    curl -f http://www.linux.com/error
    
    • 1

    三、curl命令参数详解

    由于linux curl功能十分强大,所以命令参数十分多,下表只是筛选出来的部分参数,更多参数请运行“man curl”命令查看。

    参数组参数描述
    urlurl需要抓取的一到多个URLs; 多个下面通配符的方式: 1、http://{www,ftp,mail}.aiezu.com;    2、http://aiezu.com/images/[001-999].jpg;    3、http://aiezu.com/images/[1-999].html;    4、ftp://aiezu.com/file[a-z].txt
    请 求 头-H “name: value” --header “name: value”(HTTP)添加一个http header(http请求头);
    -H “name:” --header “name:”(HTTP)移除一个http header(http请求头);
    -A “string” --user-agent “string” 【参考】(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。 也可以使用“-H”, “–header option”设置此选项;
    -e --referer 【参考】(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面; -e "aiezu.com"相当于“-H “Referer: www.qq.com””;
    响 应 头-I --head(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。 用于HTTP服务时,获取页面的http头; (如:curl -I http://aiezu.com) 用于FTP/FILE时,将会获取文件大小、最后修改时间; (如:curl -I file://test.txt)
    -i --include(HTTP)输出HTTP头和返回内容;
    -D --dump-header (HTTP)转储http响应头到指定文件;
    cookie-b name=data --cookie name=data 【参考】(HTTP)发送cookie数据到HTTP服务器,数据格式为:“NAME1=VALUE1; NAME2=VALUE2”; 如果行中没有“=”,将把参数值当作cookie文件名; 这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;
    -c filename --cookie-jar file name 【参考】(HTTP)完成操作后将服务器返回的cookies保存到指定的文件; 指定参数值为“-”将定向到标准输出“如控制台”;
    -j --junk-session-cookies(HTTP)告诉curl放弃所有的"session cookies"; 相当于重启浏览器;
    代理-x host:port -x [protocol://[user:pwd@]host[:port] --proxy [protocol://[user:pwd@]host[:port] 【参考】使用HTTP代理访问;如果未指定端口,默认使用8080端口; protocol默认为http_proxy,其他可能的值包括: http_proxy、HTTPS_PROXY、socks4、socks4a、socks5; 如: --proxy 8.8.8.8:8080; -x “http_proxy://aiezu:123@aiezu.com:80”
    -p --proxytunnel将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;
    –socks4 --socks4a --socks5 【参考】使用SOCKS4代理; 使用SOCKS4A代理; 使用SOCKS5代理; 此参数会覆盖“-x”参数;
    –proxy-anyauth --proxy-basic --proxy-diges --proxy-negotiate --proxy-ntlmhttp代理认证方式,参考: --anyauth --basic --diges --negotiate --ntlm
    -U user:password --proxy-user user:password设置代理的用户名和密码;
    数据 传输-G --get 【参考】如果使用了此参数,“-d/”、“–data”、“–data-binary”参数设置的数据,讲附加在url上,以GET的方式请求;
    -d @file -d “string” --data “string” --data-ascii “string” --data-binary “string” --data-urlencode “string” 【参考】(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method=“POST”,enctype=“application/x-www-form-urlencoded”)   -d,–data:HTTP方式POST数据;   --data-ascii:HTTP方式POST ascii数据;   --data-binary:HTTP方式POST二进制数据;   --data-urlencode:HTTP方式POST数据(进行urlencode); 如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;
    -F name=@file -F name=【参考】(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method=“POST”,enctype=“multipart/form-data”),可以使用此参数上传二进制文件。 如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如: curl -F “pic=@pic.jpg” http://aiezu.com; curl -F “page=@a.html;type=text/html” http://aiezu.com curl -F “page=@/tmp/a;filename=a.txt” http://aiezu.com 如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F “text=
    –form-string (HTTP)类似于“–form”,但是“@”、“<”无特殊含义;
    -T file --upload-file file通过“put”的方式将文件传输到远程网址; 选项参数只使用字符"-",将通过stdin读入文件内容; 如: cat test.txtcurl “http://aiezu.com/a.php” -T - curl “http://aiezu.com/a.php” -T -
    断点 续传-C --continue-at 断点续转,从文件头的指定位置开始继续下载/上传; offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;
    -r --range (HTTP/FTP/SFTP/FILE) 只传输内容的指定部分: 0-499:最前面500字节; -500:最后面500字节; 9500-:最前面9500字节; 0-0,-1:最前面和最后面的1字节; 100-199,500-599:两个100字节;
    认证–basic(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;
    –ntlm(HTTP)使用NTLM身份验证方式,用于HTTP协议; 一般用于IIS使用NTLM的网站;
    –digest(HTTP)使用HTTP Digest authentication加密,用于HTTP协议; 配合“-u/–user”选项,防止密码使用明文方式发送;
    –negotiate(HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议; 它主要目的是为它的主要目的是为kerberos5认证提供支持支持;
    –anyauth–anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;
    -u user:password --user user:password使用用户名、密码认证,此参数会覆盖“-n”、“–netrc”和“–netrc-optional”选项; 如果你只提供用户名,curl将要求你输入密码; 如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证; 此参数相当于设置http头“Authorization:”;
    证书-E <证书[:密码]> --cert <证书[:密码]>(SSL)指定“PEM”格式的证书文件和证书密码;
    –cert-type (SSL)告诉curl所提供证书的类型:PEM、DER、ENG等; 默认为“PEM”;
    –cacert (SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;
    –capath (SSL)告诉curl所以指定目录下的CA证书用来验证; 这些证书必须是“PEM”格式;
    –crlfile (HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;
    -k --insecure(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。
    SSL 其他–ciphers (SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;
    –engine 设置一个OpenSSL加密引擎用于加密操作; 使用“curl --engine list”查看支持的加密引擎列表;
    –random-file(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;
    –egd-file (SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;
    -1/–tlsv1 --tlsv1.0 --tlsv1.1 --tlsv1.2 -2/–sslv2 -3/–sslv3(SSL)使用TLS版本2与远程服务器通讯; (SSL)使用TLS 1.0版本与远程服务器通讯; (SSL)使用TLS 1.1版本与远程服务器通讯; (SSL)使用TLS 1.2版本与远程服务器通讯; (SSL)使用SSL版本2与远程服务器通讯; (SSL)使用SSL版本3与远程服务器通讯;
    私钥 公钥–key (SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“/.ssh/id_rsa”、“/.ssh/id_dsa”、“./id_rsa’”、 “./id_dsa”;
    –key-type (SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;
    –pass (SSL/SSH)指定私钥文件的密码;
    –pubkey (SSH)使用指定文件提供的您公钥;
    FTP-P --ftp-port <接口>(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如: 网卡:eth1 IP:8.8.8.8 主机名:aiezu.com 可以加端口号:eth1:20000-21000;
    –crlf(FTP)上传时将换行符(LF)转换为回车换行(CRLF);
    –ftp-account [data](FTP)ftp帐号信息;
    –ftp-method [method](FTP)可选值:multicwd/nocwd/singlecwd;
    –ftp-pasv(FTP)使用使用PASV(被动)/EPSV模式;
    –ftp-skip-pasv-ip(FTP)使用PASV的时,跳过指定IP;
    –ftp-create-dirs(FTP)上传时自动创建远程目录;
    -l --list-only(FTP)列出ftp文件列表;
    -B --use-ascii(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。
    –disable-epsv(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;
    –disable-eprt(FTP)告诉curl在主动模式时禁用EPRT和LPRT;
    限速–limit-rate 限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“–limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;
    -y --speed-time If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y. This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option.
    -Y --speed-limit If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.
    其他 选项-0/–http1.0(HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;
    –interface 使用指定的网卡接口访问; curl --interface eth0 http://aiezu.com curl --interface 10.0.0.101 http://aiezu.com
    -X --request (HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;
    –keepalive-time 设置keepalive时间
    –no-keepalive关闭keepalive功能;
    –no-buffer禁用对输出流缓冲;
    –buffer启用输出流缓冲;
    -L --location(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面; (在http响应码为3XX时使用,如301跳转、302跳转)
    –location-trusted(HTTP/HTTPS)同“–location”,但跳转后会发送跳转前的用户名和密码;
    –compressed(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;
    –connect-timeout 指定最大连接超时,单位“秒”;
    -m seconds --max-time seconds限制整个curl操作的最长时间,单位为秒;
    -s --silent安静模式。不要显示进度表或错误消息;
    -# --progress-bar显示进度条;
    错误 选项-f --fail(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;
    –retry --retry-delay --retry-max-time 失败重试次数; 重试间隔时间; 最大重试时间;
    -S --show-error安静模式下显示错误信息;
    –stderr 错误信息保存文件;
    输出-o file --output file将返回内容输出到文件。 如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:   curl “http://aiezu.com/{a,b}.txt” -o “#1.txt”;   将保存为:“a.txt”,“b.txt”;   curl “http://aiezu.com/{a,b}_[1-3].txt” -o “#1#2.txt”;   将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt   如果要根据规则创建保存目录,参考:“–create-dirs” 指定“-”将定向到标准输出“如控制台”;
    -O --remote-name将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);
    –create-dirs与“-o”参数配合使用,创建必要的本地目录层次结构
    -w --write-out format操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-” 格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}…,更多变量参考“man curl”获取; 格式参数可以使用“\n”、“\r”、“\t”等转义字符;
    调试–trace 转储所有传入和传出的数据到文件,包括描述信息; 使用“-”作为文件名将输出发送到标准输出。
    –trace-ascii file转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读; 使用“-”作为文件名将输出发送到标准输出。 这个选项会覆盖之前使用的-v、 --verbose、 --trace-ascii选项;
    –trace-time转储文件中添加时间信息;
    -K --config 从配置文件中读取参数,参考:http://curl.haxx.se/docs/
    -v --verbose显示更详细的信息,调试时使用;
    帮助-M --manual显示完整的帮助手册;
    -h --helplinux curl用法帮助;

    curl -h 的完整参数解释:

    -a/–append上传文件时,附加到目标文件
    –anyauth可以使用“任何”身份验证方法
    –basic使用HTTP基本验证
    -B/–use-ascii使用ASCII文本传输
    -d/–data HTTP POST方式传送数据
    –data-ascii 以ascii的方式post数据
    –data-binary 以二进制的方式post数据
    –negotiate使用HTTP身份验证
    –digest使用数字身份验证
    –disable-eprt禁止使用EPRT或LPRT
    –disable-epsv禁止使用EPSV
    –egd-file 为随机数据(SSL)设置EGD socket路径
    –tcp-nodelay使用TCP_NODELAY选项
    -E/–cert 客户端证书文件和密码 (SSL)
    –cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
    –key 私钥文件名 (SSL)
    –key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
    –pass 私钥密码 (SSL)
    –engine 加密引擎使用 (SSL). “–engine list” for list
    –cacert CA证书 (SSL)
    –capath CA目 (made using c_rehash) to verify peer against (SSL)
    –ciphers SSL密码
    –compressed要求返回是压缩的形势 (using deflate or gzip)
    –connect-timeout 设置最大请求时间
    –create-dirs建立本地目录的目录层次结构
    –crlf上传是把LF转变成CRLF
    –ftp-create-dirs如果远程目录不存在,创建远程目录
    –ftp-method [multicwd/nocwd/singlecwd]控制CWD的使用
    –ftp-pasv使用 PASV/EPSV 代替端口
    –ftp-skip-pasv-ip使用PASV的时候,忽略该IP地址
    –ftp-ssl尝试用 SSL/TLS 来进行ftp数据传输
    –ftp-ssl-reqd要求用 SSL/TLS 来进行ftp数据传输
    -F/–form 模拟http表单提交数据
    -form-string 模拟http表单提交数据
    -g/–globoff禁用网址序列和范围使用{}和[]
    -G/–get以get的方式来发送数据
    -h/–help帮助
    -H/–header 自定义头信息传递给服务器
    –ignore-content-length忽略的HTTP头信息的长度
    -i/–include输出时包括protocol头信息
    -I/–head只显示文档信息
    -j/–junk-session-cookies读取文件时忽略session cookie
    –interface 使用指定网络接口/地址
    –krb4 使用指定安全级别的krb4
    -k/–insecure允许不使用证书到SSL站点
    -K/–config指定的配置文件读取
    -l/–list-only列出ftp目录下的文件名称
    –limit-rate 设置传输速度
    –local-port强制使用本地端口号
    -m/–max-time 设置最大传输时间
    –max-redirs 设置最大读取的目录数
    –max-filesize 设置最大下载的文件总量
    -M/–manual显示全手动
    -n/–netrc从netrc文件中读取用户名和密码
    –netrc-optional使用 .netrc 或者 URL来覆盖-n
    –ntlm使用 HTTP NTLM 身份验证
    -N/–no-buffer禁用缓冲输出
    -p/–proxytunnel使用HTTP代理
    –proxy-anyauth选择任一代理身份验证方法
    –proxy-basic在代理上使用基本身份验证
    –proxy-digest在代理上使用数字身份验证
    –proxy-ntlm在代理上使用ntlm身份验证
    -P/–ftp-port
    使用端口地址,而不是使用PASV
    -Q/–quote 文件传输前,发送命令到服务器
    –range-file读取(SSL)的随机文件
    -R/–remote-time在本地生成文件时,保留远程文件时间
    –retry 传输出现问题时,重试的次数
    –retry-delay 传输出现问题时,设置重试间隔时间
    –retry-max-time 传输出现问题时,设置最大重试时间
    -S/–show-error显示错误
    –socks4 用socks4代理给定主机和端口
    –socks5 用socks5代理给定主机和端口
    -t/–telnet-option Telnet选项设置
    –trace 对指定文件进行debug
    –trace-ascii Like --跟踪但没有hex输出
    –trace-time跟踪/详细输出时,添加时间戳
    –url Spet URL to work with
    -U/–proxy-user 设置代理用户名和密码
    -V/–version显示版本信息
    -X/–request 指定什么命令
    -y/–speed-time放弃限速所要的时间。默认为30
    -Y/–speed-limit停止传输速度的限制,速度时间’秒
    -z/–time-cond传送时间设置
    -0/–http1.0使用HTTP 1.0
    -1/–tlsv1使用TLSv1(SSL)
    -2/–sslv2使用SSLv2的(SSL)
    -3/–sslv3使用的SSLv3(SSL)
    –3p-quotelike -Q for the source URL for 3rd party transfer
    –3p-url使用url,进行第三方传送
    –3p-user使用用户名和密码,进行第三方传送
    -4/–ipv4使用IP4
    -6/–ipv6使用IP6

    四、Linux curl命令退出码

    下面是linux curl命令的错误代码和她们的相应的错误消息,可能会出现在恶劣的环境。

    退出码错误描述
    1Unsupported protocol. This build of curl has no support for this protocol.
    2Failed to initialize.
    3URL malformed. The syntax was not correct.
    5Couldn’t resolve proxy. The given proxy host could not be resolved.
    6Couldn’t resolve host. The given remote host was not resolved.
    7Failed to connect to host.
    8FTP weird server reply. The server sent data curl couldn’t parse.
    9FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn’t exist on the server.
    11FTP weird PASS reply. Curl couldn’t parse the reply sent to the PASS request.
    13FTP weird PASV reply, Curl couldn’t parse the reply sent to the PASV request.
    14FTP weird 227 format. Curl couldn’t parse the 227-line the server sent.
    15FTP can’t get host. Couldn’t resolve the host IP we got in the 227-line.
    17FTP couldn’t set binary. Couldn’t change transfer method to binary.
    18Partial file. Only a part of the file was transferred.
    19FTP couldn’t download/access the given file, the RETR (or similar) command failed.
    21FTP quote error. A quote command returned error from the server.
    22HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/–fail is used.
    23Write error. Curl couldn’t write data to a local filesystem or similar.
    25FTP couldn’t STOR file. The server denied the STOR operation, used for FTP uploading.
    26Read error. Various reading problems.
    27Out of memory. A memory allocation request failed.
    28Operation timeout. The specified time-out period was reached according to the conditions.
    30FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!
    31FTP couldn’t use REST. The REST command failed. This command is used for resumed FTP transfers.
    33HTTP range error. The range “command” didn’t work.
    34HTTP post error. Internal post-request generation error.
    35SSL connect error. The SSL handshaking failed.
    36FTP bad download resume. Couldn’t continue an earlier aborted download.
    37FILE couldn’t read file. Failed to open the file. Permissions?
    38LDAP cannot bind. LDAP bind operation failed.
    39LDAP search failed.
    41Function not found. A required LDAP function was not found.
    42Aborted by callback. An application told curl to abort the operation.
    43Internal error. A function was called with a bad parameter.
    45Interface error. A specified outgoing interface could not be used.
    47Too many redirects. When following redirects, curl hit the maximum amount.
    48Unknown TELNET option specified.
    49Malformed telnet option.
    51The peer’s SSL certificate or SSH MD5 fingerprint was not ok.
    52The server didn’t reply anything, which here is considered an error.
    53SSL crypto engine not found.
    54Cannot set SSL crypto engine as default.
    55Failed sending network data.
    56Failure in receiving network data.
    58Problem with the local certificate.
    59Couldn’t use specified SSL cipher.
    60Peer certificate cannot be authenticated with known CA certificates.
    61Unrecognized transfer encoding.
    62Invalid LDAP URL.
    63Maximum file size exceeded.
    64Requested FTP SSL level failed.
    65Sending the data requires a rewind that failed.
    66Failed to initialize SSL Engine.
    67The user name, password, or similar was not accepted and curl failed to log in.
    68File not found on TFTP server.
    69Permission problem on TFTP server.
    70Out of disk space on TFTP server.
    71Illegal TFTP operation.
    72Unknown TFTP transfer ID.
    73File already exists (TFTP).
    74No such user (TFTP).
    75Character conversion failed.
    76Character conversion functions required.
    77Problem with reading the SSL CA cert (path? access rights?).
    78The resource referenced in the URL does not exist.
    79An unspecified error occurred during the SSH session.
    80Failed to shut down the SSL connection.
    82Could not load CRL file, missing or wrong format (added in 7.19.0).
    83Issuer check failed (added in 7.19.0).
    XXMore error codes will appear here in future releases. The existing ones are meant to never change.

    五、curl 下载功能

    5.1、下载页面:

    $ curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
    #要注意-O这里后面的url要具体到某个文件,不然抓不下来
    $ curl -O http://www.linux.com/dodo1.JPG
    
    • 1
    • 2
    • 3

    5.2、循环下载

    有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样。这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来

    $ curl -O http://www.linux.com/dodo[1-5].JPG
    
    • 1

    5.3、下载重命名

    在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖

    $ curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
    
    • 1

    由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。

    $ curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG
    
    • 1

    5.4、分块下载(option:-r)

    curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
    curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
    curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
    cat dodo1_part* > dodo1.JPG  #这样就可以查看dodo1.JPG的内容了
    
    • 1
    • 2
    • 3
    • 4

    5.5、通过ftp下载文件(option:-u)

    curl 可以通过ftp下载文件,curl提供两种从ftp中下载的语法

    curl 可以通过ftp下载文件,curl提供两种从ftp中下载的语法
    curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
    curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
    
    • 1
    • 2
    • 3

    5.6、下载,显示进度条(option:-#)或不显示进度条(option:-s)

    curl -# -O http://www.linux.com/dodo1.JPG  
    curl -s -O http://www.linux.com/dodo1.JPG
    
    • 1
    • 2

    5.7、下载,断点续传(-C )

    断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;

    curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
    curl -C -O http://www.linux.com/dodo1.JPG
    
    • 1
    • 2

    六、参考文档

    1、https://docs.gitlab.com/ee/api/jobs.html

    2、https://www.cnblogs.com/deny/p/15778324.html

    3、https://blog.csdn.net/ths512/article/details/110917388

    4、http://www.ruanyifeng.com/blog/2019/09/curl-reference.html

    5、https://www.ruanyifeng.com/blog/2011/09/curl.html

  • 相关阅读:
    MySQL Shell系列——升级检查器
    加壳的app分析dex(可以正常抓包的话)
    计算机网络总结
    Zookeeper leader选举源码分析(超详细)
    Vue3中diff算法的优化和乱序比对的实现-详细步骤(包看包会)
    桩企、车企、SaaS平台三路进击充电桩
    力扣 112. 路径总和
    HazelEngine 学习记录 - Camera Controllers
    yolov5训练与模型量化
    面试必答题“聊聊Java中线程的生命周期状态”如何破?
  • 原文地址:https://blog.csdn.net/yuelai_217/article/details/127849217