Neo Anderson's Blog

Linux基础命令-Curl

字数统计: 3.7k阅读时长: 17 min
2018/11/27
loading
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"
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 <file> 从给定的文件获取PEM格式的CRL列表

-d, –dataHTTP Post 数据(H)
–data-asciiHTTP POST ASCII 数据(H)
–data-binaryHTTP POST 二进制数据(H)
–data-rawHTTP POST data, 允许 ‘@’ 字符(H)
–data-urlencodeHTTP POST url 编码数据(H)
–delegationGSS-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-bearerOAuth 2 Bearer Token
  • -o | –output写入文件而不是stdout
1
2
curl --output >(cat >> file) http://url #追加写入同一个文件(file)中

--pass <phrase> 私钥的密码短语
--path-as-is 不要挤压……URL路径中的序列
--pinnedpubkey <hashes> 文件/哈希 用于验证对等机的公钥
--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-typeHTTS代理的客户端证书类型(H)
–proxy-ciphers用于代理的SSL密码
–proxy-crlfile为代理设置一个CRL列表
–proxy-digest 在代理上使用摘要式身份验证
–proxy-header <header/@file> 将自定义头传递给代理
–proxy-insecure 在不验证代理的情况下执行HTTPS代理连接
–proxy-keyHTTPS代理的私钥
–proxy-key-type代理的私钥文件类型
–proxy-negotiate 在代理上使用HTTP协商(SPNEGO)身份验证
–proxy-ntlm 在代理上使用NTLM身份验证
–proxy-passhttps代理的私钥的密码短语
–proxy-pinnedpubkey用于验证代理的公钥的 文件/哈希
–proxy-service-nameSPNEGO代理服务名称
–proxy-ssl-allow-beast 允许HTTPS代理的互操作存在安全缺陷
–proxy-tlsauthtypeHTTPS代理的TLS身份验证类型
–proxy-tlspasswordHTTPS代理的TLS密码
–proxy-tlsuserHTTPS代理的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
```shell

-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-serviceGSS-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

  • –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