Neo Anderson's Blog

Linux基础命令-Curl

字数统计: 3.8k阅读时长: 18 min
2018/11/27
  • man原版说明 https://curl.se/docs/manpage.html

  • TIPhttps://ec.haxx.se/usingcurl

  • –abstract-unix-socket 通过抽象的Unix域套接字连接

    1

  • –anyauth 选择任何身份验证方法(H)curl 自主选择最优认证方案

    1
    curl https://www.baidu.com --anyauth -v -I
  • -a, –append 上传时附加到目标文件(F/SFTP)

  • –basic 使用HTTP基本身份验证(H)默认选项

  • –cacert 用于验证对等端的CA证书(SSL)

  • –capath

    用于验证对等机的CA目录(SSL)

  • -E, –cert CERT[:PASSWD] 客户端证书文件和密码(SSL)example

  • –cert-type 证书文件类型(der/pem/eng)(SSL)

  • –ciphers <list of ciphers> 要使用的SSL密码(SSL)

    1
    curl https://www.howsmyssl.com/a/check | json_pp  # 获取所有支持的密码类型
    1
    curl https://www.baidu.com --cacert ~/Desktop/charles-ssl-proxying-certificate.pem -v -I --cert-type PEM
  • –cert-status 验证服务器证书的状态(SSL)

    1
    2
    ≥ curl https://www.baidu.com --cert-status                                                                      15:48
    curl: (91) No OCSP response received
  • –compressed 请求压缩响应(使用deflate或gzip)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ≥ curl https://www.neofaster.cc -I --compressed                                                                 16:47
    HTTP/2 200
    server: marco/2.13
    date: Sat, 28 Nov 2020 08:48:24 GMT
    content-type: text/html
    vary: Accept-Encoding
    x-source: C/304
    last-modified: Mon, 26 Oct 2020 10:09:39 GMT
    etag: W/"5f96a063-e4cf"
    x-frame-options: SAMEORIGIN
    expires: Sat, 28 Nov 2020 02:35:32 GMT
    cache-control: max-age=3600
    x-request-id: 65f63f2d1ce244cb74647819e9f56871
    age: 0
    via: T.49.N, V.mix-js-czx2-049, T.61.N, M.ctn-zj-jgh-069
    content-encoding: gzip
  • –compressed-ssh 启用ssh压缩(申请/请求server开启ssh压缩)

    1

  • -K, –config 指定要读取的配置文件(所有配置选项都写到统一配置文件中)

    1
    2
    3
    4
    5
    6
    > curl https://www.neofaster.cc/archives/a02e0b8d.html -I -K ./curl.config
    > vim ./curl.config
    1 url = "https://www.neofaster.cc/archives/e0d6d4c5.html"
    2 user-agent = "superagent/1.0"
    3 compressed
    4 referer = "https://www.neofaster.cc/archives/19a466d1.html"
  • –connect-timeout 连接允许的最长时间

  • –connect-to HOST1:PORT1:HOST2:PORT2 连接到主机

    1
    @todo
  • -C, –continue-at OFFSET 恢复传输偏移量(断线下载)

    1
    2
    #从已下载的(424476672位置-包大小)断点下载ubuntu镜像文件
    > curl -O https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso --continue-at 424476672 --compressed -v
  • b, –cookie 从 string/file 发送 cookie(H)

    1
    2
    3
    4
    5
    # 发送字符串的自定义cookie
    > curl -v -I https://www.example.com -b "UID=abc123;Referer=www.baidu.com"
    # 发送文件制定自定义的cookie
    > curl -v -I https://www.example.com -b

  • c, –cookie-jar 操作后将cookie写入

    1
    @todo

    –create-dirs 创建必要的本地目录层次结构
    –crlf 上载时将 LF 转换为 CRLF
    –crlfile 从给定的文件获取PEM格式的CRL列表

  • d, –data HTTP Post 数据(H)
    –data-ascii HTTP POST ASCII 数据(H)
    –data-binary HTTP POST 二进制数据(H)
    –data-raw HTTP POST data, 允许 ‘@’ 字符(H)
    –data-urlencode HTTP POST url 编码数据(H)
    –delegation GSS-API授权权限
    –digest 使用HTTP摘要身份验证(H)

  • q, –disable 禁用.currlc
    –disable-eprt 禁止使用EPRT或LPRT(F)
    –disable-epsv 禁止使用EPSV(F)
    –dns-interface 用于DNS请求的接口
    –dns-ipv4-addr

    用于DNS请求的IPv4地址
    –dns-ipv6-addr
    用于DNS请求的IPv6地址

    • -dns-servers 要使用的DNS服务器地址
  • D, –dump-header 将接收到的头写入
    –egd-file 随机数据的EGD套接字路径(SSL)
    –engine 要使用的加密引擎
    –expect100-timeout 要等多久才能100继续

  • f, –fail HTTP错误时不显示(完全没有输出)(H)
    –fail-early 第一次传输失败,不继续
    –false-start 启动 TLS=False 启动

  • F, –form <name=content> 指定HTTP多部分发布数据(H)
    –form-string <name=string> 指定多部分MIME数据
    –ftp-account 帐户数据字符串(F)
    –ftp-alternative-to-user 替换用户的字符串名称
    –ftp-create-dirs 创建远程目录(如果不存在)(F)
    –ftp-method 控制CWD使用(F)
    –ftp-pasv 使用pasv/epsv而不是port(F)

  • P, –ftp-port

    使用 PORT 而不是PASV(F)
    –ftp-pret 在pasv之前发送pret(F)
    –ftp-skip-pasv-ip 跳过PASV的IP地址(F)
    –ftp-ssl-ccc 认证后发送CCC(F)
    –ftp-ssl-ccc-mode <active/passive> 设置CCC模式(F)
    –ftp-ssl-control ftp登录需要ssl/tls,传输清除(F)

  • G, –get 以get的方式来发送数据(H)

  • g, –globoff 使用{} 和 [] 禁用URL序列和范围
    –happy-eyeballs-timeout-ms 尝试ipv4之前等待ipv6的时间(以毫秒计)

  • I, –head 仅显示响应首部信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    > curl -I  https://www.neofaster.cc                                                                             10:55
    HTTP/2 200
    date: Tue, 01 Dec 2020 02:55:30 GMT
    content-type: text/html
    vary: Accept-Encoding
    x-source: C/200
    cache-control: max-age=3600
    etag: "5fc4b851-e428"
    expires: Tue, 01 Dec 2020 02:56:48 GMT
    last-modified: Mon, 30 Nov 2020 09:16:01 GMT
    x-frame-options: SAMEORIGIN
    x-request-id: 1d0df8b3f0e9b598542ec9dab9223c84; 1a90af0a0c881375c5683951d39a8595
    age: 3523
    via: T.48.M, V.mix-js-czx2-048, T.61.H, M.ctn-zj-jgh-061
  • –haproxy-protocol 发送haproxy代理协议头

    1
    @TODO
  • H, –header <header/@file> 将自定义头传递到服务器

    1
    2
    3
    4
    5
    6
    7
    #传递字符串自定义内容header
    > curl -I https://www.neofaster.cc/archives/ed852869.html -L --header "User-Agent: neo-curl-3" --header "TID: 123abc"
    #传递文件内容header
    > curl -I https://www.neofaster.cc/archives/94aa22a6.html -L --header @./neo.header
    > cat neo.header
    User-Agent: neo-file-header
    TID: 123abc
  • –hostpubmd5 主机公钥的可接受MD5哈希(SSH)

    1
    @todo
  • -0, –http1.0 使用 HTTP 1.0(H)

  • –http1.1 使用 HTTP 1.1

  • –http2 使用 HTTP 2

    1
    2
    #指定使用版本协议, 如果配合多个最后一个服务器有效支持的协议版本生效
    curl -I https://www.neofaster.cc/archives/94aa22a6.html -L --header @./neo.header --http1.0 --http1.1 --http2 -v
  • –http2-prior-knowledge 使用HTTP 2而不升级HTTP/1.1
    –ignore-content-length 忽略远程资源的大小

  • i, –include 在输出中包含协议响应头(H/F)

  • k, –insecure 使用SSL时允许不安全的服务器连接(H)
    –interface 使用网络接口(或地址)

  • 4, –ipv4 将名称解析为IPv4地址

  • 6, –ipv6 将名称解析为IPv6地址

  • j, –junk-session-cookies 忽略从文件读取的会话cookie(H)
    –keepalive-time 保持探针的间隔时间
    –key 私钥文件名(SSL/SSH)
    –key-type 私钥文件类型 (DER/PEM/ENG)(SSL)
    –krb 启用具有安全性的Kerberos(F)
    –libcurl 转储此命令行的libcurl等效代码
    –limit-rate 限制传输速率
    -l, –list-only 仅列出ftp目录的名称(F)
    –local-port <num/range> 强制使用本地端口号的范围

  • L, –location 跟踪重定向(H)
    –location-trusted 像–location样,并将auth发送到其他主机(H)
    –login-options 服务器登录选项
    –mail-auth

    原始电子邮件的发起人地址
    –mail-from
    来自此地址的邮件
    –mail-rcpt
    邮寄到此地址

  • M, –manual 显示curl完整手册
    –max-filesize 要下载的最大文件大小
    –max-redirs 允许的最大重定向数

  • m, –max-time 允许传输的最长时间
    –metalink 将给定的URL作为metalink xml文件处理
    –negotiate 使用HTTP协商(SPNEGO)身份验证

  • n, –netrc 必须读取.netrc以获取用户名和密码
    –netrc-file 为netrc指定文件
    –netrc-optional 使用.netrc或url

  • :, –next 使下一个URL使用其单独的选项集
    –no-alpn 禁用ALPN TLS扩展

  • N, –no-buffer 禁用输出流的缓冲
    –no-keepalive 在连接上禁用tcp keepalive
    –no-npn 禁用NPN TLS扩展
    –no-sessionid 禁用SSL会话ID重用
    –noproxy 不使用代理的主机列表
    –ntlm 使用HTTP NTLM身份验证
    –ntlm-wb 对WinBind使用HTTP NTLM身份验证
    –oauth2-bearer OAuth 2 Bearer Token

  • -o | –output 写入文件而不是stdout

    1
    2
    curl --output >(cat >> file) http://url #追加写入同一个文件(file)中

    –pass 私钥的密码短语
    –path-as-is 不要挤压……URL路径中的序列
    –pinnedpubkey 文件/哈希 用于验证对等机的公钥
    –post301 在301重定向后不要切换到GET
    –post302 在302重定向后不要切换到GET
    –post303 在303重定向后不要切换到GET
    –preproxy [protocol://]host[:port] 首先使用此代理

  • #, –progress-bar 将传输进度显示为条形图
    –proto 启用/禁用协议
    –proto-default 对任何缺少方案的URL使用协议
    –proto-redir 在重定向时启用/禁用协议

  • x, –proxy [protocol://]host[:port] 使用此代理
    –proxy-anyauth 选择任何代理身份验证方法 (H)
    –proxy-basic 在代理上使用基本身份验证(H)
    –proxy-cacert 用于验证对等代理的CA证书(H)
    –proxy-capath

    用于验证代理对等机的CA目录(H)
    –proxy-cert <cert[:passwd]> 设置代理的客户端证书(H)
    –proxy-cert-type HTTS代理的客户端证书类型(H)
    –proxy-ciphers 用于代理的SSL密码
    –proxy-crlfile 为代理设置一个CRL列表
    –proxy-digest 在代理上使用摘要式身份验证
    –proxy-header <header/@file> 将自定义头传递给代理
    –proxy-insecure 在不验证代理的情况下执行HTTPS代理连接
    –proxy-key HTTPS代理的私钥
    –proxy-key-type 代理的私钥文件类型
    –proxy-negotiate 在代理上使用HTTP协商(SPNEGO)身份验证
    –proxy-ntlm 在代理上使用NTLM身份验证
    –proxy-pass https代理的私钥的密码短语
    –proxy-pinnedpubkey 用于验证代理的公钥的 文件/哈希
    –proxy-service-name SPNEGO代理服务名称
    –proxy-ssl-allow-beast 允许HTTPS代理的互操作存在安全缺陷
    –proxy-tlsauthtype HTTPS代理的TLS身份验证类型
    –proxy-tlspassword HTTPS代理的TLS密码
    –proxy-tlsuser HTTPS代理的TLS用户名
    –proxy-tlsv1 将tlsv1用于HTTPS代理

  • U, –proxy-user user:password 代理用户和密码

    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
    ```
    --proxy1.0 <host[:port]> 在给定端口上使用HTTP/1.0代理
    -p, --proxytunnel 通过HTTP代理隧道操作(使用connect)
    --pubkey <key> ssh公钥文件名
    -Q, --quote <cmd> 传输前将命令发送到服务器
    --random-file <file> 从文件中读取随机数据(SSL)
    -r, --range <range> 仅检索范围内的字节
    --raw 执行http“raw”;无传输解码(H)
    -e, --referer <URL> 引用URL(H)
    -J, --remote-header-name 使用header提供的文件名
    - `-O, --remote-name 将输出写入名为远程文件的文件`
    - `--remote-name-all 对所有URL使用远程文件名`
    -R, --remote-time 在本地输出上设置远程文件的时间
    -X, --request <command> 指定要使用的请求命令
    --request-target 指定此请求的目标
    --resolve <host:port:address> 将主机+端口解析为此地址
    --retry <num> 如果出现暂时性问题,请重试请求
    --retry-connrefused 拒绝连接时重试(与--retry一起使用)
    --retry-delay <seconds> 两次重试之间的等待时间
    --retry-max-time <seconds> 仅在此期间内重试
    --sasl-ir 在SASL身份验证中启用初始响应
    --service-name <name> SPNEGO服务名称
    -S, --show-error 显示错误,即使使用-s
    ```blade

  • s, –silent 静音模式
    –socks4 <host[:port]> 指定主机+端口上的socks4代理
    –socks4a <host[:port]> 指定主机+端口上的socks4a代理
    –socks5 <host[:port]> 指定主机+端口上的socks5代理
    –socks5-basic 为socks5代理启用用户名/密码验证
    –socks5-gssapi 为socks5代理启用GSS-API身份验证
    –socks5-gssapi-nec 与NEC Socks5服务器的兼容性
    –socks5-gssapi-service GSS-API的socks5代理服务名称
    –socks5-hostname <host[:port]> socks5代理,将主机名传递给代理

  • Y, –speed-limit 停止比此慢的传输

  • y, –speed-time 在此时间后触发“速度限制”中止
    –ssl 尝试ssl/tls (FTP, IMAP, POP3, SMTP)
    –ssl-allow-beast 允许安全缺陷改进互操作
    –ssl-no-revoke 禁用证书吊销检查(WinSL)
    –ssl-reqd 需要SSL/TLS(FTP, IMAP, POP3, SMTP)

  • 2, –sslv2 使用SSLv2(SSL)

  • 3, –sslv3 使用SSLv3(SSL)
    –stderr 重定向stderr的位置
    –suppress-connect-headers 禁止代理连接响应头(SSL)
    –tcp-fastopen 使用TCP快速打开
    –tcp-nodelay 使用tcp_nodelay选项

  • t, –telnet-option <opt=val> 设置telnet选项
    –tftp-blksize 设置tftp blksize选项
    –tftp-no-options 不要发送任何TFTP选项

  • z, –time-cond

  • 1, –tlsv1 使用TLSV1.0或更高版本(SSL)
    –tlsv1.0 使用TLSv1.0(SSL)
    –tlsv1.1 使用TLSv1.1(SSL)
    –tlsv1.2 使用TLSv1.2(SSL)
    –tlsv1.3 使用TLSv1.3(SSL)
    –tr-encoding 请求压缩传输编码(H)
    –trace 将调试跟踪写入文件
    –trace-ascii 如 –trace,但无十六进制输出
    –trace-time 向跟踪/详细输出添加时间戳
    –unix-socket 通过这个Unix域套接字连接

  • T, –upload-file 将本地文件传输到目标

  • –url 要使用的URL

    1

  • B, –use-ascii 使用ASCII/文本传输

  • u, –user user:password 服务器用户和密码

    1
    curl http://xxxx.com.cn -u guest:password
  • A, –user-agent 将用户代理发送到服务器

  • v, –verbose 打印操作的详情信息

  • V, –version 显示 curl 的版本号

  • w, –write-out 完成后使用输出格式
    –xattr 将元数据存储在扩展文件属性中

  • case演示

  • –progress-bar (花式技巧#进度条告别单调的文字,使用=-等代替)

    1
    curl --progress-bar http://xxx.jpg -o xxx.jpg  
  • -L 自动跟踪网站的301,302(有些网站做了域名迁移等)

    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
    # 比如我自己的网站做了https跳转处理
    curl www.neofaster.cc -I -L 15:42
    HTTP/1.1 301 Moved Permanently
    Server: marco/2.13
    Date: Fri, 27 Nov 2020 07:44:36 GMT
    Content-Type: text/html
    Content-Length: 183
    Connection: keep-alive
    Location: https://www.neofaster.cc/
    Via: M.ctn-zj-jgh-069
    X-Request-Id: a1b38447b844bcdaba9a530c0e6cf783

    HTTP/2 200
    server: marco/2.13
    date: Fri, 27 Nov 2020 07:44:37 GMT
    content-type: text/html
    vary: Accept-Encoding
    x-source: C/304
    last-modified: Mon, 26 Oct 2020 10:09:39 GMT
    etag: "5f96a063-e4cf"
    x-frame-options: SAMEORIGIN
    expires: Fri, 27 Nov 2020 08:08:34 GMT
    cache-control: max-age=3600
    x-request-id: ee511f8f0ae00c4e3bc25f1434be0156; bf0a7ea7db394a59f0a339b0f6e3e1fc
    accept-ranges: bytes
    age: 2163
    via: T.49.M, V.mix-js-czx2-046, T.61.H, M.ctn-zj-jgh-069

  • o 访问一个需要下载的文件,需要把返回的数据流,保存到本地,需要配置路径+名称

    1
    curl --progress-bar http://xxx.jpg -o xxx.jpg  
  • i 额外显示访问地址返回的header 信息(http协议)

  • I 只显示访问地址响应的header 信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     curl www.baidu.com -I                                                                                                                                                                                                                 15:45
    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: Fri, 27 Nov 2020 08:10:29 GMT
    Etag: "575e1f6d-115"
    Last-Modified: Mon, 13 Jun 2016 02:50:21 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18

  • -v 打印访问的整个交互过程

    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
    curl  -v ftp://ftp.scene.org/music/groups/ -I                                                                                                                                                                                         15:42
    * Trying 145.24.145.107...
    * TCP_NODELAY set
    * Connected to ftp.scene.org (145.24.145.107) port 21 (#0)
    < 220 ftp.scene.org FTP server (SceneOrgFTPD-2.4.4) ready.
    > USER anonymous
    < 331 Anonymous login ok, send your complete email address as your password
    > PASS ftp@example.com
    < 230-
    < 230- _________ _________ __________ _______ __________
    < 230- / ______/ \_ ___ \ \_ ____/ \ \ \_ ____/
    < 230- \_____ \ / \ \/ | _)_ / | \ | _)_
    < 230- / \ \ \____ | \ / | \ | \
    < 230-/_______ / \______ / /______ / \____|__ / /______ /
    < 230- \/ \/ \/ \/ \/ . ORG!
    < 230-'elektronik free art' since 11 March 1996
    < 230- Problems? Mail:
    < 230- ftp@scene.org
    < 230 Anonymous access granted, restrictions apply
    > PWD
    < 257 "/" is the current directory
    * Entry path is '/'
    > CWD music
    * ftp_perform ends with SECONDARY: 0
    < 250 CWD command successful
    > CWD groups
    < 250 CWD command successful
    * Remembering we are in dir "music/groups/"
    * Connection #0 to host ftp.scene.org left intact
    > QUIT
    < 221 Goodbye.
    * Closing connection 0
  • –trace 更加详细的输出整个访问过程(包含ASIC码)

  • –data-urlencode 让curl工具,自动给你的入参添加urlencode处理

    1

  • 自动断点续传(自动寻找断点位置)

    1
    curl --remote-name --continue-at - http://xxxx.iso
  • 自动下载多目录多文件(目录+文件名要有规律)

    1
    $ curl "https://example.com/images_00[0-9]/file_[1-4].webp" --output "file_#1-#2.webp"
CATALOG