#
一次我和同事交谈的过程中,我发现大家很少用除了浏览器以外的其他工具或平台发起请求,但是其实在开发中,知道更多的请求方式绝对是有实实在在益处的,它能帮你提高开发效率,至少能帮给你带来和后端口舌的优势~😂
下面我就简单介绍一下在 bash 中的 curl 如何发起请求~
文章开头我会对 curl 命令先逐行注释,文章末尾再举一些简单请求的例子代码~
here we go!
看之前你需要知道一点点前置知识:
一般一个 - 通常代表这是一个入参的简写,两个 -- 通常代表详细的书写,也就是说下面的文档里,- 是下面最近的 -- 的简写,
举个栗子🌰:
-a 就可以代替以下的入参:
--append--aws-sigv4--basic--ca-native--cacert--capath使用: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 功能非常强大,随手就能发起请求,希望能够帮到各位,如有纰漏,欢迎指正~