curl命令使用

curl命令

(仅作为个人笔记,如有雷同,请联系删除。。)

  curl 命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,支持包括HTTP、HTTPS、FTP等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

语法:curl [options...]

选项:

$ curl --help
Usage: curl [options...] <url>
Options: H:HTTP/HTTPS, F:FTP
     --anyauth       可以使用“任何”身份验证方法 (H)
 -a/--append         上传文件时,附加到目标文件 (F/SFTP)
     --basic         使用HTTP基本验证 (H)
     --cacert FILE   CA证书 (SSL)
     --capath DIR    CA证书 to verify peer against (SSL)
 -E/--cert CERT[:PASSWD] 客户端证书文件和密码 (SSL)
     --cert-type TYPE 证书文件类型 (DER/PEM/ENG) (SSL)
     --ciphers LIST  SSL密码 (SSL)
     --compressed    要求返回是压缩的形式 (using deflate or gzip)
 -K/--config FILE    指定配置文件去读取
     --connect-timeout SECONDS  设置最大请求时间
 -C/--continue-at OFFSET  断点续转
 -b/--cookie STRING/FILE  cookie字符串或文件读取位置 (H)
 -c/--cookie-jar FILE  操作结束后把cookie写入到这个文件中 (H)
     --create-dirs   建立本地目录的目录层次结构
     --crlf          上传时把LF转变成CRLF
     --crlfile FILE  Get a CRL list in PEM format from the given file
 -d/--data DATA     http POST方式传送数据 (H)
     --data-ascii DATA  以ascii的方式post数据 (H)
     --data-binary DATA  以二进制的方式post数据 (H)
     --data-urlencode DATA  HTTP POST data url encoded (H)
     --delegation STRING GSS-API delegation permission
     --digest        使用数字身份验证 (H)
     --disable-eprt  禁止使用EPRT或LPRT (F)
     --disable-epsv  禁止使用EPSV (F)
     --dns-servers    DNS server addrs to use: 1.1.1.1;2.2.2.2
     --dns-interface  Interface to use for DNS requests
     --dns-ipv4-addr  IPv4 address to use for DNS requests, dot notation
     --dns-ipv6-addr  IPv6 address to use for DNS requests, dot notation
 -D/--dump-header FILE  把header信息写入到该文件中
     --egd-file FILE  为随机数据(SSL)设置EGD socket路径
     --engine ENGINE  加密引擎使用 (SSL). "--engine list" for list
 -f/--fail          连接失败时不显示http错误 (H)
 -F/--form CONTENT      模拟http表单提交数据 (H)
     --form-string STRING    模拟http表单提交数据 (H)
     --ftp-account DATA  Account data string (F)
     --ftp-alternative-to-user COMMAND  String to replace "USER [name]" (F)
     --ftp-create-dirs  如果远程目录不存在,创建远程目录 (F)
     --ftp-method [MULTICWD/NOCWD/SINGLECWD]     控制CWD的使用 (F)
     --ftp-pasv      使用 PASV/EPSV 代替端口 (F)
 -P/--ftp-port ADDRESS   使用给定的端口地址,而不是使用PASV (F)
     --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址 (F)
     --ftp-pret      Send PRET before PASV (for drftpd) (F)
     --ftp-ssl    尝试用 SSL/TLS 来进行ftp数据传输
     --ftp-ssl-reqd    要求用 SSL/TLS 来进行ftp数据传输
     --ftp-ssl-ccc   Send CCC after authenticating (F)
     --ftp-ssl-ccc-mode ACTIVE/PASSIVE      Set CCC mode (F)
     --ftp-ssl-control     Require SSL/TLS for ftp login, clear for transfer (F)
 -G/--get           以get的方式来发送数据 (H)
 -g/--globoff       禁用网址序列和范围使用{}[]
 -H/--header LINE   自定义头信息传递给服务器 (H)
 -I/--head          只显示请求头信息
 -h, --help          This help text
     --hostpubmd5 MD5  Hex encoded MD5 string of the host public key. (SSH)
 -0, --http1.0       Use HTTP 1.0 (H)
     --http1.1       Use HTTP 1.1 (H)
     --http2.0       Use HTTP 2.0 (H)
     --ignore-content-length    忽略HTTP头信息的长度
 -i/--include       输出时包括protocol头信息 (H/F)
 -k/--insecure      允许不使用证书连接到SSL站点 (H)
     --interface INTERFACE    使用指定网络接口/地址
 -4, --ipv4          Resolve name to IPv4 address
 -6, --ipv6          Resolve name to IPv6 address
 -j/--junk-session-cookies    读取文件,忽略session cookie (H)
     --keepalive-time SECONDS  Interval between keepalive probes
     --key KEY       私钥文件名 (SSL/SSH)
     --key-type TYPE 私钥文件类型 (DER/PEM/ENG) (SSL)
     --krb LEVEL     使用指定安全级别的Kerberos (F)
     --libcurl FILE  Dump libcurl equivalent code of this command line
     --limit-rate RATE  设置传输速度
 -l/--list-only     列出ftp目录下的文件名称 (F/POP3)
     --local-port NUM  强制使用本地端口号
 -L, --location      Follow redirects (H)
     --location-trusted like --location and send auth to other hosts (H)
 -M/--manual        显示全手动
     --mail-from FROM  Mail from this address (SMTP)
     --mail-rcpt TO  Mail to this/these addresses (SMTP)
     --mail-auth AUTH  Originator address of the original email (SMTP)
     --max-filesize BYTES  设置最大下载的文件总量 (H/F)
     --max-redirs NUM  设置最大读取的目录数 (H)
 -m/--max-time SECONDS    设置最大传输时间
     --metalink      Process given URLs as metalink XML file
     --negotiate     使用HTTP身份验证 (H)
 -n/--netrc          从.netrc文件中读取用户名和密码
     --netrc-optional    使用其他的.netrc 或者 URL;  overrides -n
     --netrc-file FILE  Set up the netrc filename to use
 -N/--no-buffer      禁用缓冲输出
     --no-keepalive  Disable keepalive use on the connection
     --no-sessionid  Disable SSL session-ID reusing (SSL)
     --noproxy       List of hosts which do not use proxy
     --ntlm          使用 HTTP NTLM 身份验证 (H)
     --oauth2-bearer TOKEN  OAuth 2 Bearer Token (IMAP, POP3, SMTP)
 -o/--output FILE    把输出写到该文件中
     --pass PASS     私钥密码 (SSL/SSH)
     --post301       Do not switch to GET after following a 301 redirect (H)
     --post302       Do not switch to GET after following a 302 redirect (H)
     --post303       Do not switch to GET after following a 303 redirect (H)
 -#/--progress-bar   将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表(默认)。
     --proto PROTOCOLS  Enable/disable specified protocols
     --proto-redir PROTOCOLS  Enable/disable specified protocols on redirect
 -x/--proxy [PROTOCOL://]HOST[:PORT]     在给定的端口上使用PROTOCOL(http??)代理
     --proxy-anyauth    选择任意代理身份验证方法 (H)
     --proxy-basic      在代理上使用基本身份验证 (H)
     --proxy-digest     在代理上使用数字身份验证 (H)
     --proxy-negotiate   Use Negotiate authentication on the proxy (H)
     --proxy-ntlm       在代理上使用ntlm身份验证 (H)
 -U/--proxy-user USER[:PASSWORD]    设置代理用户名和密码
     --proxy1.0 HOST[:PORT]  Use HTTP/1.0 proxy on given port
 -p/--proxytunnel    使用HTTP代理 (using CONNECT)
     --pubkey KEY    Public key file name (SSH)
 -Q/--quote CMD      文件传输前,发送命令到服务器 (F/SFTP)
     --random-file FILE  File for reading random data from (SSL)
 -r/--range RANGE    仅检索来自HTTP/1.1或FTP服务器范围内的字节
     --range-file    读取(SSL)的随机文件
     --raw           Do HTTP "raw", without any transfer decoding (H)
 -e/--referer       来源网址 (H)
 -J, --remote-header-name Use the header-provided filename (H)
 -O/--remote-name    把输出写到该文件中,保留远程文件的文件名
     --remote-name-all Use the remote file name for all URLs
 -R/--remote-time    在本地生成文件时,保留远程文件的时间
 -X/--request COMMAND     指定请求命令
     --resolve HOST:PORT:ADDRESS  Force resolve of HOST:PORT to ADDRESS
     --retry NUM    传输出现问题时,重试的次数
     --retry-delay SECONDS    传输出现问题时,设置重试间隔时间
     --retry-max-time SECONDS   传输出现问题时,设置最大重试时间
     --sasl-ir       Enable initial response in SASL authentication
 -S/--show-error     显示错误
 -s/--silent         静默模式。不输出任何东西
     --socks4 HOST[:PORT]    用socks4代理给定主机和端口
     --socks4a HOST[:PORT]    SOCKS4a proxy on given host + port
     --socks5 HOST[:PORT]    用socks5代理给定主机和端口
     --socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
     --socks5-gssapi-service NAME  SOCKS5 proxy service name for gssapi
     --socks5-gssapi-nec  Compatibility with NEC SOCKS5 server
 -Y/--speed-limit RATE     停止传输速度的限制时间
 -y/--speed-time SECONDS     放弃限速所要的时间,默认为30
     --ssl           Try SSL/TLS (FTP, IMAP, POP3, SMTP)
     --ssl-reqd      Require SSL/TLS (FTP, IMAP, POP3, SMTP)
 -2, --sslv2         Use SSLv2 (SSL)
 -3, --sslv3         Use SSLv3 (SSL)
     --ssl-allow-beast Allow security flaw to improve interop (SSL)
     --stderr FILE   Where to redirect stderr. - means stdout
     --tcp-nodelay   使用TCP_NODELAY选项
 -t/--telnet-option OPT=VAL    Telnet选项设置
     --tftp-blksize VALUE  Set TFTP BLKSIZE option (must be >512)
 -z, --time-cond TIME  Transfer based on a time condition
 -1, --tlsv1         Use TLSv1 (SSL)
     --trace FILE    对指定文件进行debug跟踪
     --trace-ascii FILE    类似--trace但没有十六进制输出
     --trace-time      跟踪/详细输出时,添加时间戳
     --tr-encoding   Request compressed transfer encoding (H)
 -T/--upload-file FILE    上传文件
     --url URL       URL to work with
 -B/--use-ascii     使用ASCII /文本传输
 -u/--user USER[:PASSWORD][;OPTIONS]    设置服务器的用户名、密码和登录选项
     --tlsuser USER  TLS username
     --tlspassword STRING TLS password
     --tlsauthtype STRING  TLS authentication type (default SRP)
 -A/--user-agent STRING  设置用户代理发送给服务器(H)
 -v, --verbose       Make the operation more talkative
 -V, --version       Show version number and quit
 -w/--write-out FORMAT    完成后输出的内容
     --xattr        Store metadata in extended file attributes
 -q          如果作为第一个参数,含义为关闭.curlrc
  1. 常用选项详解
    1. -#, --progress-bar:将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表。【默认显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等】

      # eg:
      curl -O https://blog.csdn.net/weixin_42753043/article/details/124462270 # 默认显示进度表
      curl -# -O https://blog.csdn.net/weixin_42753043/article/details/124462270,-#显示进度条
      
    2. -0, --http1.0:强制使用HTTP 1.0发出请求,而不是使用其内部首选的HTTP 1.1

    3. -4, --ipv4:只将名称解析为IPv4地址(如果能将一个地址解析为多个IP版本)

    4. -6, --ipv6:只将名称解析为IPv6地址(如果能将一个地址解析为多个IP版本)

    5. -a, --append:(FTP/SFTP)在上传时,追加到目标文件而不是覆盖它。如果文件不存在,将新建。

    6. -A, --user-agent:(HTTP)指定要发送到HTTP服务端的User-Agent字符串。模拟浏览器访问。当然也可以使用 -H, --header 选项来设置。注意:如果多次使用此选项,则将使用最后一个选项。

      # eg:
      curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" https://blog.csdn.net/weixin_42753043/article/details/124462270
      
    7. --basic:使用HTTP基本身份验证

    8. -b, --cookie 将数据作为cookie传递给HTTP服务器。是之前从服务端接收到的“Set-Cookie:”行中的数据。数据格式:“NAME1=VALUE1;NAME2 = VALUE2”。也可将cookies保存在文件中,使用 -b, --cookie 指定的文件仅用作输入。要存储cookies,可以使用 -c, --cookie-jar 选项。

    9. -c, --cookie-jar :在完成操作后将所有cookie写入哪个文件

    10. --connect-timeout:连接服务端的超时时间。只限制连接阶段。

      eg:curl --connect-timeout 10 https://youtube.com/ | head
      
    11. --create-dirs:与 -o 选项一起使用,根据需要创建必要的本地目录层次结构。

      注:只创建与 -o 选项相关的dirs,没有其他内容。如果 -o 文件名没有使用dir,或者其中提到的dir已经存在,则不会创建dir。

      # eg:
      curl -o ./daqiang/index.html --create-dirshttps://blog.csdn.net/weixin_42753043/article/details/124462270
      
    12. -C, --continue-at:按给定偏移量继续/恢复以前的文件传输。注:使用 “-C -”,自动找出在哪里/如何恢复传输。

      #  eg:下载一个 2G 的文件,可以反复测试,查看结果
      curl -C - -o tmp.data http://localhost/root/tmp/tmp.data
      
    13. -d, --data post请求中向http服务器发送指定的数据,与浏览器在用户填写HTML表单并按下submit按钮时所做的相同。使用content-type:application/x-www-form-urlencoded将数据传递给服务器。

      注:常见content-typeapplication/x-www-form-urlencoded、multipart/form-data、application/json、application/xml、text/xml
      (1) -d, --data 可以在同一个命令行使用多次,使用指定的分隔符 & 将数据片段合并。eg:"-d name=daqiang -d ip=localhost"将生成一个类似"name=daqiang&ip=localhost"的post块,也可以直接这样合并使用。
      (2) --data @文件名:发送从文件中读取的数据。 eg:curl -sv --local-port 7777-d 'user=daqiang&pwd=123456' https://blog.csdn.net/weixin_42753043/login | head -n1

    14. -D, --dump-header:将响应协议头写入指定的文件。 eg:curl -D baidu_header.info www.baidu.com

    15. -F, --form :提交表单,模拟用户按下submit按钮后填充的表单。-F @文件名,从文件中获取该文本字段的内容附加在post中。

      # eg:
      curl -F password=@/etc/passwd www.xx_login.com # “password”是表单字段的名称,/etc/passwd将作为输入。 	
      curl -F "[email protected];type=text/html" url.com
      curl -F  "name=daniel;type=text/foo" url.com # 使用 ‘type=’指定Content-Type类型。
      curl -F "file=@localfile;filename=new_name" url.com # 通过设置 filename= 更改本地上传的文件名
      
    16. -G, --get使所有使用 -d, --data指定的数据在GET请求中使用,数据将被追加到URL的一个"?"的分隔符后。

      # eg:两者等价
      curl -sv -G --local-port 9000 -d 'user=daqiang&pwd=123456' https://blog.csdn.net/weixin_42753043/login/ | head -n1
      curl -sv --local-port 9000 "https://blog.csdn.net/weixin_42753043/login/?user=daqiang&pwd=123456" | head -n1
      
    17. -H, --header发送自定义请求头,可多次用于添加/替换/删除多个headers。

      # eg:
      curl -H 'Connection: keep-alive' -H 'Referer: https://www.baidu.com' -H 'User-Agent: Mozilla/1.0' https://blog.csdn.net/weixin_42753043/login/
      
    18. --keepalive-time keepalive 时长。如果使用no-keepalive,则此选项无效。如果未指定,默认为60秒。

    19. --limit-rate 指定最大传输速率(带宽)。单位:默认字节。附加"k"、"K"表示千字节,“m”、“M"表示兆字节,而"g”、"G"表示千兆字节。注意:指的是整个传输过程中计算的平均速度

      eg:
      curl --limit-rate 500k http://www.baidu.com/、curl --limit-rate 2m http://www.baidu.com/
      
    20. --local-port [-num]:指定本地的一个端口或端口范围去连接。

      eg:
      curl --local-port 9000 http://www.baidu.com/
      curl --local-port 9000-9999 http://www.baidu.com/
      
    21. -m, --max-time :允许整个操作花费的最大时间(以秒为单位)。

      # eg:
      curl -m 10 --limit-rate 5 http://www.baidu.com/ | head  # 超过10秒后,断开连接
      
    22. –max-filesize :指定要下载的文件的最大大小(以字节为单位)。如果请求的文件大于这个值,那么传输将不会启动,curl将返回退出代码63。

      # eg:
      curl --max-filesize 10 -I https://img-blog.csdnimg.cn/da12156d1031450fb6f26ee8a53e8f99.png  # 受限异常
      
    23. -o, --output :输出到一个文件,而不是标准输出。

    24. -O, --remote-name:写入到本地文件,名称与远程文件的名称相同。使用了 -O 选项,必须指定到具体的文件

      # eg:
      curl -O https://www.baidu.com/index.html
      
    25. --retry :传输出现问题时,重试的次数。数字设置为0将使curl不重试(这是缺省值)。

    26. --retry-delay :传输出现问题时,设置重试间隔时间。

    27. --retry-max-time :传输出现问题时,设置最大重试时间。将此选项设置为0则不超时重试。

    28. -s, --silent静默模式。不显示进度表/条或错误消息。

    29. -T, --upload-file :这将指定的本地文件传输到远程URL。

    30. -v, --verbose:显示详细操作信息。主要用于调试。

    31. -x, --proxy <[protocol://][user:password@]proxyhost[:port]>:使用指定的HTTP代理。如果没有指定端口号,则默认位于端口1080。

    32. -X, --request :指定与HTTP服务器通信时的请求方式。默认GET。

      # eg:
      curl -vs -X POST https://www.baidu.com | head -n1 
      curl -vs -X PUT https://www.baidu.com | head -n1
      

你可能感兴趣的:(测试开发,网络,linux,网络,功能测试,web)