🔥前端应该知道的curl请求bash工具
一次我和同事交谈的过程中,我发现大家很少用除了浏览器以外的其他工具或平台发起请求,但是其实在开发中,知道更多的请求方式绝对是有实实在在益处的,它能帮你提高开发效率,**至少能帮给你带来和后端口舌的优势~**😂
下面我就简单介绍一下在 bash
中的 curl
如何发起请求~
文章开头我会对 curl
命令先逐行注释,文章末尾再举一些简单请求的例子代码~
here we go!
正文开始👉
看之前你需要知道一点点前置知识:
一般一个 -
通常代表这是一个入参的简写,两个 --
通常代表详细的书写,也就是说下面的文档里,-
是下面最近的 --
的简写, 举个栗子🌰:
-a
就可以代替以下的入参:
--append
--aws-sigv4
--basic
--ca-native
--cacert
--capath
🔥curl 的使用文档(注释不易,且行且珍惜🤤)
使用:curl [options...]
<url>
--abstract-unix-socket
<path>
通过抽象Unix域套接字进行连接
--alt-svc<file name>
启用具有此缓存文件的alt-svc
--anyauth 选择任意身份验证方法-a,
--append 上传时将内容附加到目标文件
--aws-sigv4<provider1[:provider2[:region[:service]]]>
使用AWS V4签名验证
--basic 使用HTTP基本身份验证
--ca-native 使用本地操作系统中的CA证书
--cacert<file>
使用此CA证书验证对等体
--capath<dir>
使用此CA目录验证对等体-E,
--cert
<certificate[:password]>
客户端证书文件和密码
--cert-status 验证服务器证书的状态通过OCSP-staple
--cert-type<type>
证书类型(DER/PEM/ENG/P12)
--ciphers<list of ciphers>
使用的SSL密码
--compressed 请求压缩响应 --compressed-ssh 启用SSH压缩-K,
--config
<file>
从文件中读取配置
--connect-timeout<fractional seconds>
连接的最大时间
--connect-to HOST1:PORT1:HOST2:PORT2 连接到主机-C,
--continue-at
<offset>
恢复传输偏移量-b,
--cookie
<data|filename>
从字符串/文件发送cookie-c,
--cookie-jar
<filename>
在操作后将cookie写入文件
--create-dirs 创建必要的本地目录层次结构
--create-file-mode<mode>
创建的文件的文件模式
--crlf 在上传时将LF转换为CRLF
--crlfile<file>
使用此CRL列表
--curves<algorithm list>
(EC)请求的TLS密钥交换算法-d,
--data
<data>
HTTP POST数据
--data-ascii<data>
HTTP POST ASCII数据
--data-binary<data>
HTTP POST二进制数据
--data-raw<data>
HTTP POST数据,'@'允许
--data-urlencode<data>
HTTP POST数据URL编码
--delegation<LEVEL>
GSS-API委托权限
--digest 使用HTTP摘要身份验证-q,
--disable 禁用 .curlrc
--disable-eprt 禁用EPRT或LPRT的使用
--disable-epsv 禁用EPSV的使用
--disallow-username-in-url 不允许URL中的用户名
--dns-interface<interface>
用于DNS请求的接口
--dns-ipv4-addr<address>
用于DNS请求的IPv4地址
--dns-ipv6-addr<address>
用于DNS请求的IPv6地址
--dns-servers<addresses>
DNS服务器地址
--doh-cert-status 通过OCSP-staple验证DoH服务器证书的状态
--doh-insecure 允许不安全的DoH服务器连接
--doh-url<URL>
通过DoH解析主机名-D,
--dump-header
<filename>
将接收到的头写入<filename>
--egd-file<file>
用于随机数据的EGD套接字路径
--engine<name>
使用的加密引擎
--etag-compare<file>
将文件中的ETag作为自定义头部传递
--etag-save<file>
从请求中解析ETag并保存到文件中
--expect100-timeout<seconds>
等待100-continue的最长时间-f,
--fail 在HTTP错误时立即终止并且没有输出
--fail-early 在第一个传输错误时终止,不继续
--fail-with-body 在HTTP错误但保存正文
--false-start 启用TLS False Start-F,
--form
<name=content>
指定多部分MIME数据
--form-escape 使用反斜杠转义多部分表单字段/文件名
--form-string<name=string>
指定多部分MIME数据
--ftp-account<data>
帐号数据字符串
--ftp-alternative-to-user<command>
用于替代USER[name]
的字符串
--ftp-create-dirs 如果不存在则创建远程目录
--ftp-method<method>
控制CWD使用
--ftp-pasv 使用PASV/EPSV而不是PORT-P,
--ftp-port
<address>
使用PORT而不是PASV
--ftp-pret 在PASV之前发送PRET
--ftp-skip-pasv-ip 跳过PASV的IP地址
--ftp-ssl-ccc 在身份验证后发送CCC
--ftp-ssl-ccc-mode<active/passive>
设置CCC模式
--ftp-ssl-control 要求FTP登录时使用SSL/TLS;传输时清楚-G,
--get 将POST数据放入URL并使用GET
-g,
--globoff 禁用使用{}和[]的URL序列和范围
--happy-eyeballs-timeout-ms<milliseconds>
尝试IPv6之前的时间
--haproxy-clientip 在HAProxy PROXY协议v1头中设置客户端IP
--haproxy-protocol 发送HAProxy PROXY协议v1头-I,
--head 只显示文档信息
-H,
--header header/@file 将自定义头部传递给服务器
-h,
--help
<category>
获取命令的帮助
--hostpubmd5<md5>
可接受的主机公钥的MD5哈希
--hostpubsha256<sha256>
可接受的主机公钥的SHA256哈希
--hsts<file name>
使用此缓存文件启用HSTS
--http0.9 允许 HTTP 0.9 响应-0,
--http1.0 使用 HTTP 1.0
--http1.1 使用 HTTP 1.1
--http2 使用 HTTP/2
--http2-prior-knowledge 使用 HTTP 2,而不是 HTTP/1.1 升级
--http3 使用 HTTP v3
--http3-only 仅使用 HTTP v3
--ignore-content-length 忽略远程资源的大小-i,
--include 在输出中包含协议响应头部
-k,
--insecure 允许不安全的服务器连接
--interface<name>
使用网络界面(或地址)
--ipfs-gateway<URL>
IPFS的网关-4,
--ipv4 将名称解析为IPv4地址
-6,
--ipv6 将名称解析为IPv6地址
--json<data>
HTTP POST JSON-j,
--junk-session-cookies 忽略从文件中读取的会话cookie
--keepalive-time<seconds>
保持连接活动的时间间隔
--key<key>
私钥文件名
--key-type<type>
私钥文件类型(DER/PEM/ENG)
--krb<level>
启用Kerberos,使用的安全级别
--libcurl<file>
将此命令行的等效libcurl代码转储到此文件
--limit-rate<speed>
限制传输速度为速率-l,
--list-only 仅列表模式
--local-port<num/range>
强制使用RANGE进行本地端口号-L,
--location 跟随重定向
--location-trusted 类似于--location,并将身份验证发送到其他主机
--login-options<options>
服务器登录选项
--mail-auth<address>
原始电子邮件的发件人地址
--mail-from<address>
发送邮件给该地址
--mail-rcpt<address>
发送邮件到该地址
--mail-rcpt-allowfails 允许某些收件人的RCPT TO命令失败-M,
--manual 显示完整手册
--max-filesize<bytes>
下载的最大文件大小
--max-redirs<num>
允许的最大重定向次数-m,
--max-time
<fractional seconds>
传输的最大时间
--metalink 将给定的URL视为metalink XML文件
--negotiate 使用HTTP Negotiate (SPNEGO)身份验证-n,
--netrc 读取 .netrc 获取用户名和密码
--netrc-file<filename>
指定用于netrc的文件
--netrc-optional 使用 .netrc 或 URL -:,
--next 使下一个URL使用其单独的选项集
--no-alpn 禁用ALPN TLS扩展-N,
--no-buffer 禁用输出流的缓冲
--no-clobber 不覆盖已存在的文件
--no-keepalive 禁用连接上的TCP keepalive
--no-npn 禁用NPN TLS扩展
--no-progress-meter 不显示进度条
--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>
将输出写入文件而不是标准输出
--output-dir<dir>
文件保存目录-Z,
--parallel 并行执行传输
--parallel-immediate 不等待多路复用(使用--parallel)
--parallel-max<num>
并行传输的最大并发数
--pass<phrase>
私钥的密码
--path-as-is 不压缩URL路径中的..序列
--pinnedpubkey<hashes>
FILE/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 选择任意代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-ca-native 使用本地操作系统中的CA证书验证代理
--proxy-cacert<file>
使用此CA证书验证代理对等体
--proxy-capath<dir>
使用此CA目录验证代理对等体
--proxy-cert<cert[:passwd]>
为HTTPS代理设置客户端证书
--proxy-cert-type<type>
用于HTTPS代理的客户端证书类型
--proxy-ciphers<list>
用于代理的SSL密码
--proxy-crlfile<file>
设置代理的CRL列表
--proxy-digest 在代理上使用摘要身份验证
--proxy-header header/@file 将自定义头部传递给代理
--proxy-http2 使用HTTPS代理的HTTP/2
--proxy-insecure 在不验证代理的情况下进行HTTPS代理连接
--proxy-key<key>
HTTPS代理的私钥
--proxy-key-type<type>
HTTPS代理的私钥文件类型
--proxy-negotiate 在代理上使用HTTP Negotiate (SPNEGO)身份验证
--proxy-ntlm 在代理上使用NTLM身份验证
--proxy-pass<phrase>
HTTPS代理的私钥密码
--proxy-pinnedpubkey<hashes>
FILE/HASHES 用于验证代理的公钥
--proxy-service-name<name>
SPNEGO代理服务名称
--proxy-ssl-allow-beast 允许HTTPS代理上的安全漏洞
--proxy-ssl-auto-client-cert 使用自动客户端证书代理(Schannel)
--proxy-tls13-ciphers<ciphersuite list>
TLS 1.3代理密码套件
--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
<command>
在传输前向服务器发送命令
--random-file<file>
从文件中读取随机数据-r,
--range
<range>
仅获取范围内的字节
--rate<max request rate>
串行传输的请求速率
--raw 执行HTTP "raw",不进行传输解码-e,
--referer
<URL>
引用链接-J,
--remote-header-name 使用头文件提供的文件名
-O,
--remote-name 将输出写入命名为远程文件的文件
--remote-name-all 对所有URL使用远程文件名-R,
--remote-time 设置本地输出的远程文件的时间
--remove-on-error 在出现错误时删除输出文件-X,
--request
<method>
指定要使用的请求方法
--request-target<path>
指定此请求的目标
--resolve<[+]host:port:addr[,addr]...>
将主机+端口解析为此地址
--retry<num>
在遇到临时问题时重试请求
--retry-all-errors 重试所有错误(与--retry一起使用)
--retry-connrefused 在遇到连接被拒绝时重试(与--retry一起使用)
--retry-delay<seconds>
重试之间的等待时间
--retry-max-time<seconds>
仅在此时间段内重试
--sasl-authzid<identity>
SASL PLAIN身份验证的身份
--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>
SOCKS5代理的GSS-API服务名称
--socks5-hostname<host[:port]>
SOCKS5代理,将主机名传递给代理-Y,
--speed-limit
<speed>
停止比此速度慢的传输-y,
--speed-time
<seconds>
在此时间后触发 'speed-limit' 中止 --ssl 尝试SSL/TLS
--ssl-allow-beast 允许改进互操作性的安全漏洞
--ssl-auto-client-cert 使用自动客户端证书(Schannel)
--ssl-no-revoke 禁用证书吊销检查(Schannel)
--ssl-reqd 要求SSL/TLS
--ssl-revoke-best-effort 忽略缺少/离线证书CRL分发点(Schannel)-2,
--sslv2 使用SSLv2
-3,
--sslv3 使用SSLv3
--stderr<file>
将stderr重定向到文件
--styled-output 启用HTTP头部的样式化输出
--suppress-connect-headers 忽略代理CONNECT响应头部
--tcp-fastopen 使用TCP Fast Open
--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>
设置允许的最大TLS版本
--tls13-ciphers<ciphersuite list>
使用的TLS 1.3密码套件
--tlsauthtype<type>
TLS认证类型
--tlspassword<string>
TLS密码
--tlsuser<name>
TLS用户名-1,
--tlsv1 使用TLSv1.0或更高版本
--tlsv1.0 使用TLSv1.0或更高版本
--tlsv1.1 使用TLSv1.1或更高版本
--tlsv1.2 使用TLSv1.2或更高版本
--tlsv1.3 使用TLSv1.3或更高版本
--tr-encoding 请求使用压缩传输编码
--trace<file>
将调试跟踪输出写入文件
--trace-ascii<file>
类似于--trace,但无十六进制输出
--trace-config<string>
在跟踪/详细输出中记录的详细信息
--trace-ids 将传输和连接标识符添加到跟踪/详细输出中
--trace-time 在跟踪/详细输出中添加时间戳
--unix-socket<path>
通过此Unix域套接字连接-T,
--upload-file
<file>
将本地文件传输到目标位置
--url<url>
要操作的URL
--url-query<data>
添加URL查询部分-B,
--use-ascii 使用ASCII/文本传输
-u,
--user user:password 服务器用户名和密码
-A,
--user-agent
<name>
发送User-Agent<name>
到服务器
--variable <[%]name=text/@file> 设置变量-v,
--verbose 使操作更冗长
-V,
--version 显示版本号并退出
-w,
--write-out
<format>
完成后使用输出格式
--xattr 将元数据存储在扩展文件属性中
下面我们来试试 😎
文档太复杂太多了,那我们如何来 c
url
呢?2个 demo 你就明白啦~
- 我们给
baidu.com
发一个GET
请求(注意一下windows
系统只能用"
来标记字符串哟~)
得到下图:
- 我们再给我本地项目的注册接口发一个
POST
请求
得到下图:
demo 就这俩吧~ 吃饭去~
😊okk~ CURL 功能非常强大,随手就能发起请求,希望能够帮到各位,如有纰漏,欢迎指正~