前言

刚接触 curl 就发现它的非常强大。奈何帮助文档全是英文,看起来贼费劲。无奈只能硬着头皮用自己蹩脚的英语和翻译软件硬生生的翻译了一下 ,以便后续查阅使用。在这之前没有发现已有翻译过且详细的实例博客。偶然意外看到一篇详情博客。转到详情博客

一、简介

curl是一种命令行工具,用于传输使用URL语法指定的数据.是一个非常强大的工具,支持多种协议。这里就不过得介绍了,详情请看官网介绍

官网地址:https://curl.haxx.se/

GitHub地址:https://github.com/curl/curl

二、curl 帮助文档

格式: curl [options...] <url>
Options: (H) 仅表示HTTP/HTTPS 协议, (F) 仅表示 FTP 协议 --abstract-unix-socket <path> 通过抽象的Unix域套接字连接
--anyauth 选择任何身份验证方法(H)
-a, --append 上传时附加到目标文件(F/SFTP)
--basic 使用HTTP基本身份验证(H)
--cacert <file> 用于验证对等端的CA证书(SSL)
--capath <dir> 用于验证对等机的CA目录(SSL)
-E, --cert CERT[:PASSWD] 客户端证书文件和密码(SSL)
--cert-status 验证服务器证书的状态(SSL)
--cert-type <type> 证书文件类型(der/pem/eng)(SSL)
--ciphers <list of ciphers> 要使用的SSL密码(SSL)
--compressed 请求压缩响应(使用deflate或gzip)
--compressed-ssh 启用ssh压缩
-K, --config <file> 指定要读取的配置文件
--connect-timeout <seconds> 连接允许的最长时间
--connect-to <HOST1:PORT1:HOST2:PORT2> 连接到主机
-C, --continue-at OFFSET 恢复传输偏移量
-b, --cookie <data> 从 string/file 发送 cookie(H)
-c, --cookie-jar <filename> 操作后将cookie写入<filename>
--create-dirs 创建必要的本地目录层次结构
--crlf 上载时将 LF 转换为 CRLF
--crlfile <file> 从给定的文件获取PEM格式的CRL列表
-d, --data <data> HTTP Post 数据(H)
--data-ascii <data> HTTP POST ASCII 数据(H)
--data-binary <data> HTTP POST 二进制数据(H)
--data-raw <data> HTTP POST data, 允许 '@' 字符(H)
--data-urlencode <data> HTTP POST url 编码数据(H)
--delegation <LEVEL> GSS-API授权权限
--digest 使用HTTP摘要身份验证(H)
-q, --disable 禁用.currlc
--disable-eprt 禁止使用EPRT或LPRT(F)
--disable-epsv 禁止使用EPSV(F)
--dns-interface <interface> 用于DNS请求的接口
--dns-ipv4-addr <address> 用于DNS请求的IPv4地址
--dns-ipv6-addr <address> 用于DNS请求的IPv6地址
- -dns-servers <addresses> 要使用的DNS服务器地址
-D, --dump-header <filename> 将接收到的头写入<filename>
--egd-file <file> 随机数据的EGD套接字路径(SSL)
--engine <name> 要使用的加密引擎
--expect100-timeout <seconds> 要等多久才能100继续
-f, --fail HTTP错误时不显示(完全没有输出)(H)
--fail-early 第一次传输失败,不继续
--false-start 启动 TLS=False 启动
-F, --form <name=content> 指定HTTP多部分发布数据(H)
--form-string <name=string> 指定多部分MIME数据
--ftp-account <data> 帐户数据字符串(F)
--ftp-alternative-to-user <command> 替换用户的字符串[名称](F)
--ftp-create-dirs 创建远程目录(如果不存在)(F)
--ftp-method <method> 控制CWD使用(F)
--ftp-pasv 使用pasv/epsv而不是port(F)
-P, --ftp-port <address> 使用 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 仅显示响应首部信息
--haproxy-protocol 发送haproxy代理协议头
-H, --header <header/@file> 将自定义头传递到服务器
-h, --help 显示当前帮助文档
--hostpubmd5 <md5> 主机公钥的可接受MD5哈希(SSH)
-0, --http1.0 使用 HTTP 1.0(H)
--http1.1 使用 HTTP 1.1
--http2 使用 HTTP 2
--http2-prior-knowledge 使用HTTP 2而不升级HTTP/1.1
--ignore-content-length 忽略远程资源的大小
-i, --include 在输出中包含协议响应头(H/F)
-k, --insecure 使用SSL时允许不安全的服务器连接(H)
--interface <name> 使用网络接口(或地址)
-4, --ipv4 将名称解析为IPv4地址
-6, --ipv6 将名称解析为IPv6地址
-j, --junk-session-cookies 忽略从文件读取的会话cookie(H)
--keepalive-time <seconds> 保持探针的间隔时间
--key <key> 私钥文件名(SSL/SSH)
--key-type <type> 私钥文件类型 (DER/PEM/ENG)(SSL)
--krb <level> 启用具有安全性的Kerberos<level>(F)
--libcurl <file> 转储此命令行的libcurl等效代码
--limit-rate <speed> 限制传输速率
-l, --list-only 仅列出ftp目录的名称(F)
--local-port <num/range> 强制使用本地端口号的范围
-L, --location 跟踪重定向(H)
--location-trusted 像--location样,并将auth发送到其他主机(H)
--login-options <options> 服务器登录选项
--mail-auth <address> 原始电子邮件的发起人地址
--mail-from <address> 来自此地址的邮件
--mail-rcpt <address> 邮寄到此地址
-M, --manual 显示curl完整手册
--max-filesize <bytes> 要下载的最大文件大小
--max-redirs <num> 允许的最大重定向数
-m, --max-time <seconds> 允许传输的最长时间
--metalink 将给定的URL作为metalink xml文件处理
--negotiate 使用HTTP协商(SPNEGO)身份验证
-n, --netrc 必须读取.netrc以获取用户名和密码
--netrc-file <filename> 为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 <no-proxy-list> 不使用代理的主机列表
--ntlm 使用HTTP NTLM身份验证
--ntlm-wb 对WinBind使用HTTP NTLM身份验证
--oauth2-bearer <token> OAuth 2 Bearer Token
-o, --output <file> 写入文件而不是stdout
--pass <phrase> 私钥的密码短语
--path-as-is 不要挤压……URL路径中的序列
--pinnedpubkey <hashes> 文件/哈希 用于验证对等机的公钥
--post301 在301重定向后不要切换到GET
--post302 在302重定向后不要切换到GET
--post303 在303重定向后不要切换到GET
--preproxy [protocol://]host[:port] 首先使用此代理
-#, --progress-bar 将传输进度显示为条形图
--proto <protocols> 启用/禁用协议
--proto-default <protocol> 对任何缺少方案的URL使用协议
--proto-redir <protocols> 在重定向时启用/禁用协议
-x, --proxy [protocol://]host[:port] 使用此代理
--proxy-anyauth 选择任何代理身份验证方法 (H)
--proxy-basic 在代理上使用基本身份验证(H)
--proxy-cacert <file> 用于验证对等代理的CA证书(H)
--proxy-capath <dir> 用于验证代理对等机的CA目录(H)
--proxy-cert <cert[:passwd]> 设置代理的客户端证书(H)
--proxy-cert-type <type> HTTS代理的客户端证书类型(H)
--proxy-ciphers <list> 用于代理的SSL密码
--proxy-crlfile <file> 为代理设置一个CRL列表
--proxy-digest 在代理上使用摘要式身份验证
--proxy-header <header/@file> 将自定义头传递给代理
--proxy-insecure 在不验证代理的情况下执行HTTPS代理连接
--proxy-key <key> HTTPS代理的私钥
--proxy-key-type <type> 代理的私钥文件类型
--proxy-negotiate 在代理上使用HTTP协商(SPNEGO)身份验证
--proxy-ntlm 在代理上使用NTLM身份验证
--proxy-pass <phrase> https代理的私钥的密码短语
--proxy-pinnedpubkey <hashes> 用于验证代理的公钥的 文件/哈希
--proxy-service-name <name> SPNEGO代理服务名称
--proxy-ssl-allow-beast 允许HTTPS代理的互操作存在安全缺陷
--proxy-tlsauthtype <type> HTTPS代理的TLS身份验证类型
--proxy-tlspassword <string> HTTPS代理的TLS密码
--proxy-tlsuser <name> HTTPS代理的TLS用户名
--proxy-tlsv1 将tlsv1用于HTTPS代理
-U, --proxy-user <user:password> 代理用户和密码
--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
-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 <name> GSS-API的socks5代理服务名称
--socks5-hostname <host[:port]> socks5代理,将主机名传递给代理
-Y, --speed-limit <speed> 停止比此慢的传输
-y, --speed-time <seconds> 在此时间后触发“速度限制”中止
--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 <value> 设置tftp blksize选项
--tftp-no-options 不要发送任何TFTP选项
-z, --time-cond <time> 基于时间条件的传输
--tls-max <VERSION> 使用TLSV1.0或更高版本
--tlsauthtype <type> TLS身份验证类型
--tlspassword TLS密码
--tlsuser <name> TLS用户名
-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 <file> 将调试跟踪写入文件
--trace-ascii <file> 如 --trace,但无十六进制输出
--trace-time 向跟踪/详细输出添加时间戳
--unix-socket <path> 通过这个Unix域套接字连接
-T, --upload-file <file> 将本地文件传输到目标
--url <url> 要使用的URL
-B, --use-ascii 使用ASCII/文本传输
-u, --user <user:password> 服务器用户和密码
-A, --user-agent <name> 将用户代理<name>发送到服务器
-v, --verbose 打印操作的详情信息
-V, --version 显示 curl 的版本号
-w, --write-out <format> 完成后使用输出格式
--xattr 将元数据存储在扩展文件属性中

三、curl 的使用

# 显示响应首部信息
curl -I www.baidu.com # 模拟浏览器
curl -A "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25" www.baidu.com # 静默模式,不显示curl进度
curl -s www.baidu.com # 显示一次通信详情信息
curl -v www.baidu.com # 显示详情并时间戳跟踪
curl -v --trace-time www.baicu.com # 指定 GET 请求访问百度,
curl -X GET www.baidu.com 同 curl -G www.baidu.com # 向 httpbin.org 发送 POST 请求
curl -s -X POST "http://www.httpbin.org/post" -H "accept: application/json" # 自定义Header至百度
curl -H "name:zzw" www.baidu.com

参考博客:

https://www.cnblogs.com/doseoer/p/7044344.html

https://www.jianshu.com/p/3aecc761fb9e

05-26 22:51