天天看点

curl命令

curl命令

curl

是一个命令行工具,用于使用任何受支持的协议

HTTP

FTP

IMAP

POP3

SCP

SFTP

SMTP

TFTP

TELNET

LDAP

FILE

向网络服务器传输数据或从网络服务器传输数据,其被设计成无需用户交互即可工作,因此非常适合在

shell

脚本中使用,该软件提供代理支持、用户身份验证、

FTP

上传、

HTTP posting

SSL

连接、

cookie

、文件断点传输、

metalink

等功能。

语法

curl [options] [URL...]
           

参数

  • -#, --progress-bar

    : 让

    curl

    将进度显示为一个简单的进度条,而不是标准的、更具信息性的计量器。
  • -:, --next

    : 告诉

    curl

    对以下

    URL

    和相关选项使用单独的操作,这允许您发送多个

    URL

    请求,每个请求都有自己的特定选项,例如不同的用户名或自定义请求,在

    7.36.0

    中添加`。
  • -0, --http1.0

    :

    HTTP

    ,告诉

    curl

    使用

    HTTP 1.0

    版本,而不是内部首选的

    HTTP 1.1

  • --http1.1

    HTTP

    curl

    HTTP

    版本

    1.1

    ,这是内部默认版本,在

    7.33.0

    添加。
  • --http2

    HTTP

    curl

    HTTP 2

    发出请求,这需要构建底层

    libcurl

    来支持它,在

    7.33.0

  • --no-npn

    : 禁用

    NPN TLS

    扩展,如果

    libcurl

    是使用支持

    NPN

    SSL

    库构建的,则

    NPN

    默认启用,支持

    HTTP 2

    libcurl

    NPN

    https

    会话期间与服务器协商对

    HTTP 2

    的支持,在

    7.36.0

  • --no-alpn

    ALPN TLS

    libcurl

    是用一个支持

    ALPN

    SSL

    库构建的,那么

    ALPN

    HTTP 2

    libcurl

    ALPN

    https

    HTTP 2

    7.36.0

  • -1, --tlsv1

    SSL

    ,强制

    curl

    在与远程

    TLS

    服务器协商时使用

    tls1.x

    版本,您可以使用选项

    --tlsv1.0

    --tlsv1.1

    --tlsv1.2

    来更精确地控制

    TLS

    版本。
  • -2, --sslv2

    SSL

    ,当与远程

    SSL

    服务器协商时,强制

    curl

    SSL version 2

  • -3, --sslv3

    SSL

    SSL

    curl

    SSL version 3

  • -4, --ipv4

    : 如果

    curl

    能够将一个地址解析为多个

    IP

    版本(如果它支持

    IPv6

    ),则此选项告诉

    curl

    仅将名称解析为

    IPv4

    地址。
  • -6, --ipv6

    curl

    IP

    IPv6

    curl

    IPv6

  • -a, --append

    FTP/SFTP

    ,当在

    FTP

    上传中使用时,这将告诉

    curl

    追加到目标文件,而不是覆盖它,如果文件不存在,就创建它,注意,这个选项会被一些

    SSH

    服务器忽略,包括

    OpenSSH

  • -A, --user-agent <agent string>

    HTTP

    ,指定要发送到

    HTTP

    服务器的用户代理字符串,如果这个字段没有设置为

    Mozilla/4.0

    ,一些做得不好的

    cgi

    就会失败,要对字符串中的空格进行编码,请用单引号将字符串括起来,当然,这也可以通过

    -H,-header

    选项进行设置,如果多次使用此选项,将使用最后一个选项。
  • --anyauth

    HTTP

    curl

    自己找出身份验证方法,并使用远程站点声称支持的最安全的方法,这是通过首先执行请求并检查响应头来完成的,因此可能会导致额外的网络往返,这是用来代替设置特定的身份验证方法的,您可以使用

    --basic

    --digest

    --ntlm

    --negotiate

    来实现,请注意,如果从

    stdin

    上传数据,则不建议使用

    --anyauth

    ,因为它可能需要发送两次数据,然后客户端必须能够倒带,如果从

    stdin

    上传时需要,上传操作将失败。
  • -b, --cookie <name=data>

    HTTP

    ,将数据作为

    cookie

    传递到

    HTTP

    服务器,它应该是以前在

    Set Cookie:

    行中从服务器接收到的数据,数据格式应为

    NAME1=VALUE1; NAME2=VALUE2

    ,如果行中没有使用

    =

    符号,则会将其视为用于读取以前存储的

    cookie

    行的文件名,如果这些行匹配,则应在此会话中使用,使用这个方法还可以激活

    cookieparser

    ,它也会让

    curl

    记录传入的

    cookie

    ,如果您将这个方法与

    -L,-location

    选项结合使用,这可能会很方便,要从中读取

    cookie

    的文件的文件格式应该是纯

    HTTP

    头或

    Netscape/Mozilla cookie

    文件格式,请注意,用

    -b, --cookie

    指定的文件仅用作输入,文件中不会存储

    Cookie

    ,要存储

    cookie

    ,请使用

    -c, --cookiejar

    选项,或者甚至可以使用

    -D, --dump-header

    HTTP

    头保存到文件中,如果多次使用此选项,将使用最后一个选项。
  • -B, --use-ascii

    FTP/LDAP

    ,启用

    ASCII

    传输,对于

    FTP

    ,这也可以通过使用以

    type=A

    结尾的

    URL

    来实现,对于

    win32

    系统,此选项使发送到标准输出的数据处于文本模式。
  • --basic

    HTTP

    curl

    HTTP

    基本身份验证,这是默认值,并且此选项通常是无意义的,除非您使用它来重写先前设置的选项,该选项设置了不同的身份验证方法,例如

    --ntlm

    --digest

    --negotiate

  • -c, --cookie-jar <file name>

    HTTP

    ,指定在完成操作后要将所有

    cookie

    写入哪个文件,

    curl

    写入以前从指定文件读取的所有

    cookie

    以及从远程服务器接收的所有

    cookie

    ,如果没有已知的

    cookies

    ,则不会写入任何文件,文件将使用

    Netscape cookie

    文件格式写入,如果将文件名设置为单破折号

    -

    ,则

    cookie

    将写入标准输出,此命令行选项将激活生成

    curl

    记录并使用

    cookie

    cookie

    引擎,另一种激活它的方法是使用

    -b, --cookie

    选项,如果不能创建或写入

    cookiejar

    ,整个

    curl

    操作不会失败,甚至不会清楚地报告错误,使用

    -v

    会显示一个警告,但这是关于这种可能致命的情况的唯一可见反馈,如果多次使用此选项,将使用最后指定的文件名。
  • -C, --continue-at <offset>

    : 以给定的偏移量继续

    /

    恢复以前的文件传输,给定的偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再将其传输到目标,如果与上载一起使用,

    curl

    将不使用

    FTP

    服务器命令大小,使用

    -C -

    告诉

    curl

    自动找出在哪里

    /

    如何继续传输,然后它使用给定的输出

    /

    输入文件来解决这个问题,如果多次使用此选项,将使用最后一个选项。
  • --ciphers <list of ciphers>

    SSL

    ,指定要在连接中使用的密码,密码列表必须指定有效的密码,此为的

    SSL

    密码列表详细信息

    http://www.openssl.org/docs/apps/ciphers.html

    NSS

    密码的实现方式与

    OpenSSL

    GnuTLS

    不同,

    NSS

    密码的完整列表位于以下

    URL

    NSSCipherSuite

    条目中

    http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives

    ,如果多次使用此选项,将使用最后一个选项。
  • --compressed

    HTTP

    ,使用

    curl

    支持的算法之一请求压缩响应,并保存未压缩的文档,如果使用此选项并且服务器发送不受支持的编码,

    curl

    将报告错误。
  • --connect-timeout <seconds>

    : 允许连接到服务器的最长时间(秒),这只会限制连接阶段,一旦

    curl

    连接了,这个选项就不再有用了,自

    7.32.0

    以来,此选项接受十进制值,但实际超时的精度将随着指定超时的十进制精度增加而降低,另请参见

    -m, -max time

    选项,如果多次使用此选项,将使用最后一个选项。
  • --create-dirs

    : 当与

    -o

    选项结合使用时,

    curl

    将根据需要创建必要的本地目录层次结构,此选项创建与

    -o

    选项一起提到的

    dir

    ,而不是其他选项,如果

    -o

    文件名不使用

    dir

    ,或者它提到的

    dir

    已经存在,则不会创建

    dir

    ,要在使用

    FTP

    SFTP

    时创建远程目录,请尝试

    --FTP create dirs

  • --crlf

    FTP

    ,上传时将

    LF

    转换为

    CRLF

    ,适用于

    MVS (OS/390)

  • --crlfile <file>

    HTTPS/FTPS

    ,提供一个使用

    PEM

    格式的文件,其中包含一个证书吊销列表,该列表可以指定要被视为吊销的对等证书,如果多次使用此选项,将使用最后一个选项,在

    7.19.7

    增加。
  • -d, --data <data>

    HTTP

    ,将

    POST

    请求中指定的数据发送到

    HTTP

    服务器,就像用户填写

    HTML

    表单并按下

    submit

    按钮时浏览器所做的那样,这将导致

    curl

    使用内容类型

    application/x-www-form-urlencoded

    将数据传递给服务器,与

    -F, --form

    比较,

    -d, --data

    --data ascii

    相同,要发布纯二进制的数据,应该改用

    --data binary

    选项,要对表单字段的值进行

    URL

    编码,可以使用

    --data urlencode

    ,如果这些选项中的任何一个在同一命令行上被多次使用,则指定的数据段将与分隔的

    &

    符号合并在一起,因此,使用

    -d name=daniel -d skill=lousy

    将生成一个类似

    name=daniel&skill=lousy

    post

    块,如果数据以

    @

    开头,其余的应该是从中读取数据的文件名,如果要从

    stdin

    读取数据,也可以指定多个文件,例如,从名为

    foobar

    的文件发布数据将使用

    --data@foobar

    完成,当

    --data

    被告知从这样的文件中读取时,回车符和换行符将被去除。
  • -D, --dump-header <file>

    : 将协议头写入指定的文件,当您想存储

    HTTP

    站点发送给您的头文件时,使用此选项非常方便,通过使用

    -b, -cookie

    选项,可以在第二次

    curl

    调用中读取来自头的

    cookie

    ,但是,

    -c,-cookie jar

    选项是存储

    cookie

    的更好方法,在

    FTP

    中使用时,

    FTP

    服务器响应行被认为是

    headers

    ,因此保存在那里,如果多次使用此选项,将使用最后一个选项。
  • --data-ascii <data>

    : 请参见

    -d, --data

  • --data-binary <data>

    HTTP

    ,这将完全按照指定的方式发布数据,无需任何额外处理,如果数据以

    @

    开头,其余的应该是文件名,数据的发布方式与

    --dataascii

    类似,只是保留了换行符和回车符,并且从不进行转换,如果多次使用此选项,则第一个选项后面的选项将附加

    -d, -data

    中所述的数据。
  • --data-urlencode <data>

    HTTP

    ,这会发布数据,与其他

    --data

    选项类似,但会执行

    URL

    编码,在

    7.18.0

    中添加,为了符合

    CGI

    <data>

    部分应以名称开头,后跟分隔符和内容规范,可以使用以下语法之一将

    <data>

    部分传递给

    curl

    • content

      : 这将使

      curl URL

      编码内容并将其传递,请小心,使内容不包含任何

      =

      @

      符号,因为这将使语法与以下其他情况之一匹配。
    • =content

      curl URL-encode

      编码内容并将其传递,前面的

      =

      符号不包括在数据中。
    • name=content

      curl URL

      编码内容部分并将其继续传递,请注意,名称部分应该已经过

      URL

      编码。
    • @filename

      : 这将使卷曲加载来自给定文件(包括任何换行符)的数据,对该数据进行

      URL

      编码并在

      POST

      中传递。
    • name@filename

      curl

      从给定的文件(包括任何换行符)加载数据,

      URL

      对该数据进行编码并在

      POST

      中传递,名称部分附加了一个等号,结果是

      name=urlencoded

      文件内容,注意,名称应该已经是

      URL

      编码的。
  • --delegation LEVEL

    : 设置

    LEVEL

    ,告诉服务器在处理用户凭据时允许委托什么,通常与

    GSS/kerberos

    一起使用。
    • none

      : 不允许任何授权。
    • policy

      : 委托当且仅当

      Kerberos

      服务票证中设置了

      OK-AS-DELEGATE

      标志时,这是领域策略的问题。
    • always

      : 无条件地允许服务器进行委托。
  • --digest

    HTTP

    HTTP

    摘要身份验证,这是一种身份验证方案,可防止密码以明文形式通过有线发送,将此选项与正常的

    -u, -user

    选项结合使用,以设置用户名和密码,如果多次使用此选项,则只使用第一个选项。
  • --disable-eprt

    FTP

    curl

    在执行活动

    FTP

    传输时禁用

    EPRT

    LPRT

    命令,

    curl

    通常会首先尝试使用

    EPRT

    ,然后在使用

    PORT

    之前使用

    LPRT

    ,但是有了这个选项,它会立即使用

    PORT

    EPRT

    LPRT

    是原始

    FTP

    协议的扩展,可能无法在所有服务器上工作,但它们以比传统的

    PORT

    命令更好的方式实现了更多功能,

    --eprt

    可以用来再次显式地启用

    eprt

    ,并且

    --no eprt

    --disable eprt

    的别名,禁用

    EPRT

    只会更改活动行为,如果要切换到被动模式,则不需要使用

    -P, -ftp

    端口或强制使用

    -ftp pasv

  • --dns-interface <interface>

    curl

    通过

    <interface>

    发送传出的

    DNS

    请求,此选项对应于

    --interface

    (不影响

    DNS

    ),提供的字符串必须是接口名称(不是地址),此选项要求

    libcurl

    是使用支持此操作的解析器后端构建的,

    c-ares

    后端是唯一这样的,在

    7.33.0

    中添加。
  • --dns-ipv4-addr <ip-address>

    curl

    在发出

    ipv4dns

    请求时绑定到

    <ip address>

    ,以便

    DNS

    请求源自此地址,参数应为单个

    IPv4

    地址,此选项要求

    libcurl

    c-ares

    7.33.0

  • --dns-ipv6-addr <ip-address>

    : 在发出

    ipv6dns

    请求时,告诉

    curl

    绑定到

    <ip address>

    DNS

    IPv6

    libcurl

    c-ares

    7.33.0

  • --dns-servers <ip-address,ip-address>

    : 设置要使用的

    DNS

    服务器列表,而不是系统默认值,

    IP

    地址列表应以逗号分隔,端口号也可以选择在每个

    IP

    地址后给出

    <Port number>

    ,此选项要求

    libcurl

    c-ares

    7.33.0

  • -e, --referer <URL>

    HTTP

    referer Page

    信息发送到

    HTTP

    服务器,当然,这也可以用

    -H, -header

    标志来设置,当与

    -L, -location

    一起使用时,您可以在

    --referer URL

    后面附加

    ; auto

    ,使

    curl

    location:header

    后面自动设置上一个

    URL

    auto

    字符串可以单独使用,即使您没有设置初始

    --referer

  • -E, --cert <certificate[:password]>

    SSL

    curl

    在使用

    HTTPS

    FTPS

    或其他基于

    SSL

    的协议获取文件时使用指定的客户端证书文件,如果使用安全传输,证书必须为

    PKCS#12

    格式,如果使用任何其他引擎,证书必须为

    PEM

    格式,如果未指定可选密码,将在终端上查询该密码,注意,这个选项假设一个

    certificate

    是私钥和私钥连接在一起的,请参见

    --cert

    --key

    以独立地指定它们。
  • --engine <name>

    : 选择用于密码操作的

    OpenSSL

    加密引擎,使用

    --engine list

    打印构建时支持的引擎的列表,请注意,并非所有

    engine

    在运行时都可用。
  • --environment

    RISC OS ONLY

    -w

    选项支持的名称设置一系列环境变量,以便在运行

    curl

    之后更容易地提取有用的信息。
  • --egd-file <file>

    SSL

    ,指定守护进程套接字的路径名,套接字用于为

    SSL

    连接的随机引擎播种,另请参见

    --random file

    选项。
  • --cert-type <type>

    SSL

    curl

    提供的证书是什么类型的证书,

    PEM

    DER

    ENG

    是公认的类型,如果未指定,则假定为

    PEM

  • --cacert <CA certificate>

    SSL

    curl

    使用指定的证书文件来验证对等方,文件可能包含多个

    CA

    证书,证书必须采用

    PEM

    格式,通常情况下,

    curl

    是使用默认文件构建的,因此此选项通常用于更改默认文件。
  • --capath <CA certificate directory>

    SSL

    curl

    使用指定的证书目录来验证对等方,可以通过使用

    :

    分隔多条路径,例如

    path1:path2:path3

    ,证书必须是

    PEM

    格式的,如果

    curl

    是基于

    OpenSSL

    构建的,那么目录必须使用

    OpenSSL

    提供的

    c_rehash

    程序进行处理,如果

    --cacert

    文件包含许多

    CA

    证书,那么使用

    --capath

    可以使

    OpenSSL

    支持的

    curl

    比使用

    --cacert

    更有效地建立

    SSL

    连接。如果设置了此选项,将忽略默认的

    capath

    值,如果多次使用,将使用最后一个值。
  • -f, --fail

    HTTP

    ,服务器错误时无提示失败,即完全没有输出,这样做主要是为了更好地使脚本等更好地处理失败的尝试,在正常情况下,当

    HTTP

    服务器无法传递文档时,它会返回一个

    HTML

    文档,通常会描述原因,此标志将阻止

    curl

    输出该值并返回错误

    22

    ,这种方法不是故障安全的,有时会出现不成功的响应代码,特别是在涉及身份验证时,例如响应代码

    401

    407

  • -F, --form <name=content>

    HTTP

    ,这使得

    curl

    可以模拟用户按下

    submit

    按钮的填充表单,

    curl

    根据

    rfc2388

    multipart/form

    数据发布数据,这样就可以上传二进制文件等,若强制内容部分成为文件,在文件名前面加上

    @

    符号,若要仅从文件中获取内容部分,请在文件名前面加上

    <

    符号,

    @

    <

    之间的区别是

    @

    使一个文件作为文件上传附加到

    post

    中,而

    <

    使一个文本字段从一个文件中获取该文本字段的内容。
  • --ftp-account [data]

    FTP

    ,当

    FTP

    服务器在提供用户名和密码后请求

    account data

    时,使用

    ACCT

    命令发送该数据,在

    7.13.0

    中添加,如果多次使用此选项,将使用最后一个选项。
  • --ftp-alternative-to-user <command>

    FTP

    ,如果与用户的身份验证和

    PASS

    命令失败,则发送此命令,当使用客户端证书通过

    FTPS

    连接到

    Tumbleweed

    的安全传输服务器时,使用

    SITE AUTH

    将告诉服务器从证书中检索用户名,在

    7.15.5

  • --ftp-create-dirs

    FTP/SFTP

    FTP

    sftp url/

    操作使用服务器上当前不存在的路径时,

    curl

    的标准行为是失败,使用此选项,

    curl

    将尝试创建丢失的目录。
  • --ftp-method [method]

    FTP

    ,控制

    curl

    应该使用什么方法访问

    FTP(S)

    服务器上的文件,在

    7.15.1

    添加,方法参数应该是以下选项之一:
    • multicwd

      curl

      对给定

      URL

      中的每个路径部分执行一个

      CWD

      操作,对于深层层次结构,这意味着有很多命令,

      RFC1738

      就是这么说明的,这是默认但最慢的行为。
    • nocwd

      curl

      根本不做

      CWD

      curl

      将执行

      SIZE

      RETR

      STOR

      等操作,并为所有这些命令提供到服务器的完整路径,这是最快的行为。
    • singlecwd

      curl

      对完整的目标目录执行一个

      CWD

      ,然后正常地对文件进行操作,就像

      multicwd

      一样,这比

      nocwd

      更符合标准,但没有

      multicwd

      的全部处理。
  • --ftp-pasv

    FTP

    ,数据连接使用被动模式,被动是内部默认行为,但使用此选项可用于覆盖以前的

    -P/-ftp

    端口选项,在

    7.11.0

    中添加,如果多次使用此选项,则只使用第一个选项,撤消强制的被动端口确实是不可行的,但是您必须再次强制执行正确的

    -P, --ftp

    端口,被动模式意味着

    curl

    将首先尝试

    EPSV

    命令,然后再尝试

    PASV

    ,除非使用

    --disable EPSV

  • --ftp-skip-pasv-ip

    FTP

    curl

    连接数据连接时,告诉

    curl

    不要使用服务器在响应

    curl

    PASV

    命令时建议的

    IP

    地址,相反,

    curl

    将重用它已经用于控制连接的相同

    IP

    地址,在

    7.14.2

    增加,如果使用

    PORT

    EPRT

    EPSV

    代替

    PASV

    ,则此选项无效。
  • --ftp-pret

    FTP

    curl

    PASV

    EPSV

    之前发送

    PRET

    命令,某些

    FTP

    服务器(主要是

    drftpd

    )需要这个非标准的命令来显示目录列表,以及在

    PASV

    模式下进行更新和下载,在

    7.20.x

  • --ftp-ssl-ccc

    FTP

    CCC

    (清除命令通道)在验证后关闭

    SSL/TLS

    层,控制信道通信的其余部分将是未加密的,这允许

    NAT

    路由器跟踪

    FTP

    事务,默认模式为被动模式,其他模式请参见

    --ftp ssl ccc mode

    ,在

    7.16.1

  • --ftp-ssl-ccc-mode [active/passive]

    FTP

    CCC

    (清除命令通道)设置

    CCC

    模式,被动模式不会启动关闭,而是等待服务器执行,并且不会从服务器回复关闭,活动模式启动关机并等待服务器的回复,

    7.16.2

  • --ftp-ssl-control

    FTP

    FTP

    登录需要

    SSL/TLS

    ,清除以进行传输,允许安全的身份验证,但非加密的数据传输效率,如果服务器不支持

    SSL/TLS

    ,则传输失败,在

    7.16.0

    中添加,目前仍然可以使用,但将在将来的版本中删除。
  • --form-string <name=string>

    HTTP

    ,类似于

    --form

    ,只是命名参数的值字符串是按字面意思使用的,值中的前导

    @

    <

    字符以及

    ; type=

    字符串没有特殊含义,如果字符串值可能意外触发

    --form

    的'

    @

    '或'

    <

    '特性,请优先使用

    --form

  • -g, --globoff

    : 此选项关闭

    URL globbing

    解析器,设置此选项时,可以指定包含字母

    {}[]

    URL

    ,而无需

    curl

    本身对其进行解释,请注意,这些字母不是正常的合法

    URL

    内容,但它们应该根据

    URI

    标准进行编码。
  • -G, --get

    : 使用此选项时,将使用

    -d

    -data

    -data binary

    -data urlencode

    指定的所有数据在

    HTTP GET

    请求中使用,而不是在其他情况下使用的

    POST

    请求,数据将附加到带有

    ?

    URL

    中分离器,如果与

    -I

    结合使用,

    POST

    数据将被附加到带有

    HEAD

    请求的

    URL

    中,如果多次使用此选项,则只使用第一个选项,这是因为撤消

    GET

    没有意义,但是您应该执行您喜欢的替代方法。
  • -H, --header <header>

    HTTP

    ,向服务器发送

    HTTP

    时请求中包含的额外头,您可以指定任意数量的额外标头,请注意,如果您应该添加一个与

    curl

    将使用的内部头具有相同名称的自定义头,那么将使用外部设置的头而不是内部头,这使得你可以做比

    curl

    更复杂的东西,您不应该在不完全清楚自己在做什么的情况下替换内部设置的头文件,通过在冒号的右侧提供一个没有内容的替换来删除内部标题,如

    : -H Host:

    ,如果发送没有值的自定义标头,则其标头必须以分号结尾,例如

    -H X-custom-header;

    以发送

    X-custom-header:

    curl

    将确保您添加

    /

    替换的每个标题都使用正确的行尾标记发送,因此您不应将其添加为标题内容的一部分

    :

    不要添加换行符或回车符,它们只会为您带来麻烦,另请参见

    -A, --user-agent

    -e, --referer

  • --hostpubmd5 <md5>

    SCP/SFTP

    ,传递包含

    32

    个十六进制数字的字符串,字符串应该是远程主机公钥的

    128

    MD5

    校验和,除非

    md5 sums

    匹配,否则

    curl

    将拒绝与主机的连接,在

    7.17.1

  • --ignore-content-length

    HTTP

    ,忽略内容长度标题,这对于运行

    Apache1.x

    的服务器尤其有用,后者将报告大于

    2G

    的文件的不正确内容长度。
  • -i, --include

    HTTP

    ,在输出中包括

    HTTP

    头,

    HTTP

    头包括服务器名称、文档日期、

    HTTP

    版本等内容。
  • -I, --head

    HTTP/FTP/FILE

    ,仅获取

    HTTP

    HTTP

    服务器的特点是响应头,它只用来获取文档的头,当用于

    FTP

    或文件时,

    curl

    仅显示文件大小和上次修改时间。
  • --interface <name>

    : 使用指定的接口执行操作,您可以输入接口名、

    IP

    地址或主机名,例如

    : curl

    —接口

    eth0:1 http://www.netscape.com/

    如果多次使用此选项,将使用最后一个选项。
  • -j, --junk-session-cookies

    HTTP

    curl

    被告知从给定文件读取

    cookies

    时,此选项将使其放弃所有会话

    cookies,

    这将基本上具有与启动新会话相同的效果,典型的浏览器总是在关闭会话

    cookie

    时丢弃它们。
  • -J, --remote-header-name

    HTTP

    ,此选项告诉

    -O, -remote name

    选项使用服务器指定的内容配置文件名,而不是从

    URL

    提取文件名,在提供的文件名中还没有尝试解码%

    -

    序列,因此此选项可能会为您提供意外的文件名。
  • -k, --insecure

    SSL

    ,这个选项显式地允许

    curl

    执行不安全的

    SSL

    连接和传输,所有

    SSL

    连接都试图通过使用默认安装的

    CA

    证书捆绑包来确保安全,这使得所有被认为是不安全的连接失败,除非使用

    -k, -unsecure

  • -K, --config <config file>

    : 指定从哪个配置文件读取

    curl

    参数,配置文件是一个文本文件,可以在其中写入命令行参数,然后使用这些参数,就像它们被写入实际的命令行一样,选项及其参数必须在同一配置文件行中指定,并用空格、冒号或等号分隔,可以选择在配置文件中给出长选项名,而不使用初始双破折号,如果是这样,冒号或等号字符可以用作分隔符,如果使用一个或两个破折号指定选项,则选项与其参数之间不能有冒号或等号字符,如果参数要包含空格,则参数必须用引号括起来,在双引号中,下列转义序列可用:

    \\

    \"

    \t

    \n

    \r

    \v

    ,任何其他字母前面的反斜杠将被忽略,如果配置行的第一列是

    #

    字符,则该行的其余部分将被视为注释,在配置文件中,每个物理行只写一个选项,将文件名指定为

    -K, --config

    -,

    使

    curl

    stdin

    读取文件。
  • --keepalive-time <seconds>

    : 此选项设置在发送

    keepalive

    探测之前连接需要保持空闲的时间以及各个

    keepalive

    探测之间的时间,它目前在提供

    TCP_KEEPIDLE

    TCP_KEEPINTVL

    套接字选项的操作系统上非常有效(指

    Linux

    、最近的

    AIX

    HP-UX

    等),如果使用

    --no keepalive,

    则此选项无效,(在

    7.18.0

    中添加)如果多次使用此选项,将使用最后一个选项,如果未指定,则该选项默认为

    60

    秒。
  • --key <key>

    SSL/SSH

    ,私钥文件名,允许您在此单独的文件中提供私钥,如果多次使用此选项,将使用最后一个选项。
  • --key-type <type>

    SSL

    ,私钥文件类型,指定

    --key

    提供的私钥是哪种类型,支持

    DER

    PEM

    ENG,

    如果未指定,则假定为

    PEM

  • --krb <level>

    FTP

    Kerberos

    身份验证和使用,必须输入级别,并且级别应为

    clear

    safe

    secretary

    private

    之一,如果您使用的级别不是这些级别之一,则将改用

    private

    ,此选项需要使用

    kerberos4

    支持构建的库,这并不常见,使用

    -V, -version

    查看卷曲是否支持它,如果多次使用此选项,将使用最后一个选项。
  • -l, --list-only

    FTP

    ,列出

    FTP

    目录时,此开关强制使用仅名称视图,如果用户希望机器解析

    FTP

    目录的内容,这尤其有用,因为普通目录视图不使用标准的外观或格式,这样使用时,该选项将导致向服务器发送

    NLST

    命令,而不是

    LIST

    ,注意: 一些

    FTP

    服务器在响应

    NLST

    时只列出文件,它们不包括子目录和符号链接,

    POP3

    POP3

    检索特定电子邮件时,此开关强制执行

    LIST

    命令而不是

    RETR

    ,如果用户希望查看服务器上是否存在特定的消息

    id

    以及它的大小,那么这一点特别有用,注意: 当与

    -X, -request<command>

    组合使用时,此选项可用于发送

    UIDL

    命令,因此用户可以使用电子邮件的唯一标识符而不是其消息

    id

    来发出请求,在

    7.21.5

  • -L, --location

    HTTP/HTTPS

    ,如果服务器报告请求的页面已移动到其他位置(用

    location:header

    3XX

    响应代码表示),此选项将使

    curl

    在新位置上重做请求,如果与

    -i, --include

    -i, --head

    一起使用,将显示所有请求页面的标题,使用身份验证时,

    curl

    只将其凭据发送到初始主机,如果重定向将

    curl

    带到另一个主机,它将无法截获用户

    +

    密码,另请参见

    --location trusted

    ,了解如何更改此设置,您可以使用

    --max redirs

    选项来限制要遵循的重定向数量,当

    curl

    遵循重定向并且请求不是纯

    GET

    (例如

    POST

    PUT

    )时,如果

    HTTP

    响应是

    301

    302

    303

    ,它将使用

    GET

    执行以下请求,如果响应代码是任何其他

    3xx

    代码,

    curl

    将使用相同的未修改方法重新发送以下请求,您可以告诉

    curl

    不要更改

    non-GET

    请求方法,以便在

    30x

    响应之后使用专用选项

    --post301

    -post302

    -post303

    获取。
  • --libcurl <file>

    : 将此选项附加到任何普通的

    curl

    命令行,您将获得一个

    libcurl

    ,它使用

    C

    源代码编写到文件中,执行与命令行操作相同的操作!如果多次使用此选项,将使用最后给定的文件名,

    7.16.1

  • --limit-rate <speed>

    : 指定您希望

    curl

    使用的最大传输速率

    -

    用于下载和上载,如果您有一个有限的管道,并且希望您的传输不使用整个带宽,则此功能非常有用,使它比其他情况下慢,给定的速度以字节

    /

    秒为单位,除非附加后缀,加上

    k

    k

    将把数字计为千字节,

    m

    m

    表示兆字节,而

    g

    g

    表示千兆字节,例如

    : 200K

    3m

    1G

    ,给定的速率是整个传输过程中计算的平均速度,这意味着

    curl

    可能在短脉冲中使用更高的传输速度,但随着时间的推移,它使用的传输速度不会超过给定的速率,如果您还使用

    -Y, -speed limit

    选项,则该选项将优先,并可能略微削弱速率限制,以帮助保持速度限制逻辑正常工作,如果多次使用此选项,将使用最后一个选项。
  • --local-port <num>[-num]

    : 设置用于连接的本地端口号的首选数目或范围,请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置为太窄可能会导致不必要的连接设置失败,在

    7.15.2

  • --location-trusted

    HTTP/HTTPS

    ,与

    -L, --location

    类似,但允许向站点可能重定向到的所有主机发送名称

    +

    密码,如果站点将您重定向到要向其发送身份验证信息的站点(在

    HTTP

    基本身份验证的情况下是明文),则这可能会或可能不会导致安全漏洞。
  • -m, --max-time <seconds>

    : 允许整个操作所用的最长时间(秒),这有助于防止批处理作业因网络或链接运行缓慢而挂起数小时,自

    7.32.0

    --connect timeout

  • --login-options <options>

    : 指定服务器身份验证期间要使用的登录选项,您可以使用登录选项指定身份验证期间可能使用的特定于协议的选项,目前只有

    IMAP

    POP3

    SMTP

    支持登录选项,有关登录选项的更多信息,请参阅

    RFC 2384

    RFC 5092

    IETF

    草稿

    draft-earhart-url-smtp-00.txt

    (在

    7.34.0

    中添加),如果多次使用此选项,将使用最后一个选项。
  • --mail-auth <address>

    SMTP

    ,指定单个地址,这将用于指定正在中继到另一个服务器的已提交邮件的身份验证地址(标识),在

    7.25.0

  • --mail-from <address>

    SMTP

    ,指定发送给定邮件的单一地址,在

    7.20.0

  • --max-filesize <bytes>

    : 指定要下载的文件的最大大小(以字节为单位),如果请求的文件大于这个值,传输将不会开始,

    curl

    将返回退出代码

    63

    ,注意

    :

    文件大小在下载之前并不总是已知的,对于这样的文件,即使文件传输最终超过这个给定的限制,这个选项也不起作用,这涉及到

    FTP

    HTTP

    传输。
  • --mail-rcpt <address>

    : (

    SMTP

    )指定单个地址、用户名或邮件列表名称,在执行邮件传输时,收件人应指定要将邮件发送到的有效电子邮件地址,(在

    7.20.0

    中添加)执行地址验证(

    VRFY

    命令)时,应将收件人指定为用户名或用户名和域(根据

    RFC5321

    3.5

    节),(在

    7.34.0

    中添加)在执行邮件列表扩展(

    EXPN

    命令)时,应该使用邮件列表名称指定收件人,例如

    Friends

    London Office

    7.34.0

  • --max-redirs <num>

    : 设置允许的最大重定向次数,如果使用

    -L, --location

    ,这个选项可以用来防止

    curl

    不断地遵循重定向,默认情况下,限制设置为

    50

    个重定向,将此选项设置为

    -1

    以使其无限,如果多次使用此选项,将使用最后一个选项。
  • --metalink

    : 此选项可以告诉

    curl

    将给定的

    URI

    作为

    Metalink

    文件进行解析和处理(支持版本

    3

    和版本

    4

    (

    RFC 5854

    )),并在出现错误(例如文件或服务器不可用)时使用中列出的镜像进行故障转移,它还将在下载完成后验证文件的哈希值,

    Metalink

    文件本身在内存中下载和处理,而不是存储在本地文件系统中。
  • -n, --netrc

    : 使

    curl

    扫描用户主目录中的

    .netrc

    netrc on Windows

    )文件以获取登录名和密码,这通常用于

    UNIX

    上的

    FTP

    ,如果与

    HTTP

    一起使用,

    curl

    将启用用户身份验证,有关文件格式的详细信息,请参阅

    netrc(4)

    ftp(1)

    ,如果文件没有正确的权限,

    curl

    不会报错,环境变量

    HOME

    用于查找主目录,一个快速且非常简单的示例,说明如何设置

    .netrc

    以允许

    curl

    FTP

    传输到机器

    host.domain.com

    网站用户名为

    myself

    和密码为

    secret

    的应类似于

    :

    机器

    host.domain.com

    网站登录密码密码。
  • -N, --no-buffer

    : 禁用输出流的缓冲,在正常的工作环境中,

    curl

    将使用一个标准的缓冲输出流,它将以块的形式输出数据,而不一定是在数据到达时,使用此选项将禁用该缓冲,请注意,这是已记录的否定选项名称,因此,可以使用

    --buffer

    来强制执行缓冲。
  • --netrc-file

    : 此选项类似于

    --netrc

    ,只是您提供了

    curl

    应该使用的

    netrc

    文件的路径(绝对或相对),每次调用只能指定一个

    netrc

    文件,如果提供了多个

    --netrc

    文件选项,则只使用最后一个选项,(

    7.21.5

    增加)此选项会覆盖

    --netrc

    的任何用法,因为它们是互斥的,如果指定,它还将遵循

    --netrc optional

  • --netrc-optional

    : 与

    --netrc

    非常相似,但此选项使

    .netrc

    的用法成为可选的,而不是像

    --netrc

    选项那样是强制性的。
  • --negotiate

    HTTP

    ,启用协商(

    SPNEGO

    )身份验证,如果要为代理身份验证启用协商(

    SPNEGO

    ),请使用

    --proxy Negotiate

    GSS-API

    SSPI

    支持构建的库,使用

    -V, -version

    查看

    curl

    是否支持

    GSS-API/SSPI

    SPNEGO

    ,使用此选项时,还必须提供假

    -u, -user

    选项以正确激活身份验证代码,发送

    -u

    就足够了,因为实际上没有使用

    -u

    选项中的用户名和密码,如果多次使用此选项,则只使用第一个选项。
  • --no-keepalive

    : 禁用在

    TCP

    连接上使用

    keepalive

    消息,因为默认情况下

    curl

    会启用它们,请注意,这是已记录的否定选项名称,因此,可以使用

    --keepalive

    来强制执行

    keepalive

  • --no-sessionid

    SSL

    ,禁用

    curl

    SSL

    会话

    ID

    缓存的使用,默认情况下,所有传输都使用缓存完成,请注意,尽管尝试重用

    SSL

    id

    不会对任何事情造成伤害,但在野外似乎存在损坏的

    SSL

    实现,可能需要您禁用它才能成功,(在

    7.16.0

    中添加)请注意,这是已记录的否定选项名称,因此,您可以使用

    --sessionid

    来强制执行会话

    ID

    缓存。
  • --noproxy <no-proxy-list>

    : 不使用代理(如果指定了代理)的主机的逗号分隔列表,唯一的通配符是一个

    *

    字符,它匹配所有主机,并有效地禁用代理,此列表中的每个名称都匹配为包含主机名的域或主机名本身,例如,本地网站将匹配本地网站,

    7.19.4

    中增加。
  • --ntlm

    HTTP

    NTLM

    身份验证,

    NTLM

    身份验证方法是由

    Microsoft

    设计的,用于

    IIS web

    服务器,它是一个专有的协议,由聪明的人逆向设计,并根据他们的努力在

    curl

    中实现,这种行为不应该被认可,您应该鼓励每个使用

    NTLM

    的人转而使用公共的和文档化的身份验证方法,比如

    Digest

    ,如果要为代理身份验证启用

    NTLM

    --proxy NTLM

    SSL

    -V, -version

    curl

    NTLM

    ,如果多次使用此选项,则只使用第一个选项。
  • -o, --output <file>

    : 将输出写入

    <file>

    而不是标准输出,如果使用

    {}

    []

    获取多个文档,则可以在

    <file>

    说明符中使用

    #

    后跟数字,该变量将替换为正在获取的

    URL

    的当前字符串。
  • -O, --remote-name

    : 将输出写入名为的本地文件,就像我们得到的远程文件一样,仅使用远程文件的文件部分,路径被切断,用于保存的远程文件名是从给定的

    URL

    提取的,而不是从其他

    URL

    提取的,因此,文件将保存在当前工作目录中,如果要将文件保存在其他目录中,请确保在使用

    -O, -remote name

    标志调用

    curl

    之前更改当前工作目录,没有对文件名执行

    URL

    解码,如果名称中有%

    20

    或其他

    URL

    编码的部分,它们将以文件名的形式结束,您可以使用此选项的次数与您拥有的

    URL

    数量相同。
  • --oauth2-bearer

    IMAP、POP3、SMTP

    ,指定

    OAUTH 2.0

    服务器身份验证的承载令牌,承载令牌与用户名一起使用,用户名可以指定为

    --url

    -u, -user

    选项的一部分,承载令牌和用户名根据

    rfc6750

    格式化,如果多次使用此选项,将使用最后一个选项。
  • --proxy-header <header>

    HTTP

    ,向代理发送

    HTTP

    时请求中包含的额外头,您可以指定任意数量的额外标头,这是与

    -H, -header

    等效的选项,但仅适用于代理通信,就像在连接请求中一样,当您希望将单独的头发送到代理时,它将发送到实际的远程主机,

    curl

    /

    :

    不要添加换行符或回车符,它们只会为您带来麻烦,使用此选项指定的头不会包含在

    curl

    知道不会发送到代理的请求中,此选项可多次用于添加

    /

    替换

    /

    删除多个标头,在

    7.37.0

  • -p, --proxytunnel

    : 当使用

    HTTP

    代理(

    -x, --proxy

    )时,此选项将导致非

    HTTP

    协议尝试通过代理进行隧道传输,而不是仅使用它来执行类似

    HTTP

    的操作,隧道方法是通过

    HTTP

    代理连接请求来实现的,并且要求代理允许直接连接到

    curl

    希望通过隧道连接到的远程端口号。
  • -P, --ftp-port <address>

    FTP

    ,在连接

    FTP

    时反转默认的发起程序

    /

    侦听程序角色,此开关使

    curl

    使用活动模式,在实践中,

    curl

    然后告诉服务器连接回客户机指定的地址和端口,而被动模式则要求服务器设置一个

    IP

    地址和端口以供连接。
  • --pass <phrase>

    SSL/SSH

    ,私钥的密码短语,如果多次使用此选项,将使用最后一个选项。
  • --post301

    HTTP

    curl

    遵守

    rfc2616/10.3.2

    ,在执行

    301

    重定向时不要将

    POST

    请求转换为

    GET

    请求,非

    RFC

    行为在

    web

    浏览器中无处不在,因此

    curl

    默认情况下进行转换以保持一致性,然而,服务器可能需要在这样的重定向之后保持

    POST

    ,此选项仅在使用

    -L, -location

    7.17.1

    中添加)时才有意义。
  • --post302

    HTTP

    curl

    rfc2616/10.3.2

    302

    POST

    GET

    RFC

    web

    curl

    POST

    -L, -location

    7.19.1

  • --post303

    HTTP

    curl

    rfc2616/10.3.2

    303

    POST

    GET

    RFC

    web

    curl

    POST

    -L, -location

    7.26.0

  • --proto <protocols>

    curl

    使用列出的协议进行初始检索,协议从左到右求值,以逗号分隔,每个协议都是一个协议名或

    all

    ,可以选择以零个或多个修饰符作为前缀。
  • --proto-redir <protocols>

    curl

    在重定向后使用列出的协议,有关协议的表示方式,请参见

    --proto

    ,(

    7.20.2

    增加)。
  • --proxy-anyauth

    curl

    在与给定代理通信时选择合适的身份验证方法,这可能会导致额外的请求

    /

    响应往返,(

    7.13.2

  • --proxy-basic

    curl

    在与给定代理通信时使用

    HTTP

    基本身份验证,使用

    --basic

    对远程主机启用

    HTTP basic

    Basic

    curl

    用于代理的默认身份验证方法。
  • --proxy-digest

    curl

    HTTP

    摘要身份验证,使用

    --digest

    HTTP

    摘要。
  • --proxy-negotiate

    curl

    HTTP

    协商(

    SPNEGO

    )身份验证,使用

    --negotiate

    启用与远程主机的

    HTTP

    SPNEGO

    ),

    7.17.1

  • --proxy-ntlm

    curl

    httpntlm

    身份验证,使用

    --ntlm

    启用远程主机的

    ntlm

  • --proxy1.0 <proxyhost[:port]>

    : 使用指定的

    HTTP 1.0

    代理,如果未指定端口号,则假定在端口

    1080

    处,此选项与

    HTTP proxy

    选项

    -x, --proxy

    之间的唯一区别是,尝试通过代理使用

    CONNECT

    将指定

    HTTP 1.0

    协议,而不是默认的

    HTTP 1.1

  • --pubkey <key>

    SSH

    ,公钥文件名,允许您在此单独的文件中提供公钥,如果多次使用此选项,将使用最后一个选项。
  • -q

    : 如果用作命令行上的第一个参数,则不会读取和使用

    curlrc config

    文件,有关默认配置文件搜索路径的详细信息,请参见

    -K, --config

  • -Q, --quote <command>

    FTP/SFTP

    ,向远程

    FTP

    SFTP

    服务器发送任意命令,

    Quote

    命令在传输发生之前发送(确切地说,是在

    FTP

    传输中的初始

    PWD

    命令之后),若要使命令在成功传输后执行,请在其前面加一个短划线

    -

    ,要使命令在

    curl

    更改工作目录后发送,就在传输命令之前,在命令前面加上

    +

    (这仅适用于

    FTP

    ),您可以指定任意数量的命令,如果服务器返回其中一个命令失败,则整个操作将中止,必须按照

    RFC 959

    的定义将语法正确的

    FTP

    命令发送到

    FTP

    服务器,或将下面列出的命令之一发送到

    SFTP

    服务器,此选项可以多次使用,在与

    FTP

    服务器通信时,在命令前面加一个星号

    *

    curl

    即使失败也能继续,因为默认情况下,

    curl

    会在第一次失败时停止,

    SFTP

    是一种二进制协议,与

    FTP

    curl

    在将

    SFTP quote

    命令发送到服务器之前会自己解释它们,文件名可以用

    shell

    样式引用以嵌入空格或特殊字符。
  • -r, --range <range>

    HTTP/FTP/SFTP/FILE

    ,从

    HTTP/1.1

    FTP

    SFTP

    服务器或本地文件检索字节范围(即部分文档),可以通过多种方式指定范围。
  • -R, --remote-time

    : 使用时,这将使

    curl

    尝试找出远程文件的时间戳,如果该时间戳可用,则使本地文件获得相同的时间戳。
  • --random-file <file>

    SSL

    ,指定包含随机数据的文件的路径名,数据用于为

    SSL

    --egd

    文件选项。
  • --raw

    HTTP

    ,使用时,它会禁用所有内容或传输编码的内部

    HTTP

    解码,而是让它们原封不动地传递,

    7.16.2

  • --remote-name-all

    : 此选项将更改所有给定

    URL

    的默认操作,使其处理方式与每个

    URL

    -O

    -remote name

    一样,因此,如果要在使用

    --remote name all

    之后对特定

    URL

    禁用该选项,则必须使用

    -o-

    --no remote name

    7.19.0

  • --resolve <host:port:address>

    : 为特定主机和端口对提供自定义地址,使用此方法,可以使

    curl

    请求使用指定的地址,并防止使用通常解析的地址,将其视为命令行上提供的一种

    /etc/hosts

    替代方案,端口号应该是用于主机将用于的特定协议的编号,这意味着,如果要为同一主机提供不同端口的地址,则需要多个条目,可以多次使用此选项添加许多要解析的主机名,在

    7.21.3

  • --retry <num>

    curl

    尝试执行传输时返回暂时性错误,它将在放弃之前重试此次数,将数字设置为 将使

    curl

    不重试(这是默认值),瞬时错误表示

    :

    超时、

    ftp4xx

    响应代码或

    http5xx

    响应代码,当

    curl

    将要重试传输时,它将首先等待一秒钟,然后对于所有即将进行的重试,它将加倍等待时间,直到达到

    10

    分钟,这将是其余重试之间的延迟,通过使用

    --retry delay

    可以禁用这个指数退避算法,另请参见

    --retry max time

    以限制允许重试的总时间,(

    7.12.3

    增加)如果多次使用此选项,将使用最后一个选项。
  • --retry-delay <seconds>

    : 当传输因暂时性错误而失败时,在每次重试之前使

    curl

    休眠此时间量(它会更改重试之间的默认退避时间算法),只有同时使用

    --retry

    时,此选项才有意义,将此延迟设置为零将使

    curl

    使用默认回退时间,(

    7.12.3

  • --retry-max-time <seconds>

    : 重试计时器在第一次传输尝试之前重置,只要计时器没有达到这个给定的限制,重试就会照常进行(请参阅

    --retry

    ),请注意,如果计时器尚未达到限制,则会发出请求,并且在执行时,可能需要比给定的时间段更长的时间,要限制单个请求的最长时间,请使用

    -m, -max time

    ,将此选项设置为零以不超时重试,(

    7.12.3

  • -s, --silent

    : 安静或安静模式,不显示进度表或错误消息,使卷发静音,它仍然会输出您请求的数据,甚至可能输出到终端

    /stdout

    ,除非您重定向它。
  • --sasl-ir

    : 在

    SASL

    身份验证中启用初始响应,在

    7.31.0

  • -S, --show-error

    -s

    一起使用时,如果

    curl

    失败,它将显示一条错误消息。
  • --ssl

    FTP, POP3, IMAP, SMTP

    ,尝试使用

    SSL/TLS

    进行连接,如果服务器不支持

    SSL/TLS

    ,则还原为非安全连接,另请参见

    --ftp ssl control

    --ssl reqd

    以了解所需的不同加密级别,(在

    7.20.0

    中添加)此选项以前称为

    --ftp ssl

    7.11.0

    中添加),该选项名称仍可以使用,但将在将来的版本中删除。
  • --ssl-reqd

    FTP, POP3, IMAP, SMTP

    ,连接需要

    SSL/TLS

    ,如果服务器不支持

    SSL/TLS

    ,则终止连接,(在

    7.20.0

    --ftp ssl reqd

    7.15.5

  • --ssl-allow-beast

    SSL

    curl

    不要绕过

    SSL3

    TLS1.0

    协议中称为

    BEAST

    的安全缺陷,如果不使用此选项,

    SSL

    层可能会使用已知的解决方法来解决某些较旧的

    SSL

    实现的互操作性问题,警告

    :

    此选项会降低

    SSL

    安全性,通过使用此标志,您会要求完全相同的安全性,在

    7.25.0

  • --socks4 <host[:port]>

    SOCKS4

    1080

    处,(

    7.15.2

    增加)此选项将覆盖以前使用的任何

    -x, --proxy

    ,因为它们是互斥的,从

    7.21.7

    开始,此选项是多余的,因为您可以使用

    socks4://

    协议前缀指定具有

    -x, --proxy

    socks4

    代理,如果多次使用此选项,将使用最后一个选项。
  • --socks4a <host[:port]>

    SOCKS4a

    1080

    处,(在

    7.18.0

    中添加)此选项将覆盖以前使用的任何

    -x, --proxy

    7.21.7

    socks4a://

    -x, -proxy

    socks4a

  • --socks5-hostname <host[:port]>

    SOCKS5

    代理(并让代理解析主机名),如果未指定端口号,则假定在端口

    1080

    7.18.0

    -x, --proxy

    7.21.7

    socks5h://

    协议前缀指定带有

    -x, -proxy

    socks5

    主机名代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作

    --socks

    ,但没有附加数字)。
  • --socks5 <host[:port]>

    SOCKS5

    代理

    -

    但在本地解析主机名,如果未指定端口号,则假定在端口

    1080

    处,此选项将覆盖以前使用的任何

    -x, --proxy

    7.21.7

    socks5://

    -x, -proxy

    socks5

    代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作

    --socks

    ,但没有附加数字),此选项(以及

    --socks4

    )不适用于

    IPV6

    FTPS

    LDAP

  • --socks5-gssapi-service <servicename>

    socks

    服务器的默认服务名称是

    rcmd/server fqdn

    ,此选项允许您更改它,示例

    : ---socks5 proxy name--socks5 gssapi service sockd

    将使用

    sockd/proxy name--socks5 proxy name--socks5 gssapi service sockd/real name

    将在代理名称与主体名称不匹配的情况下使用

    sockd/real name

    7.19.4

  • --socks5-gssapi-nec

    : 作为

    GSS-API

    协商的一部分,将协商保护模式,

    RFC1961

    在第

    4.3/4.4

    节中说它应该受到保护,但

    NEC

    参考实施没有,选项

    --socks5 gssapi nec

    允许保护模式协商的无保护交换,在

    7.19.4

  • --stderr <file>

    : 将对

    stderr

    的所有写入重定向到指定的文件,如果文件名是一个普通的

    -

    ,则改为写入标准输出,如果多次使用此选项,将使用最后一个选项。
  • -t, --telnet-option <OPT=val>

    : 将选项传递给

    telnet

    协议,支持的选项包括

    : TTYPE=<term>

    设置终端类型,

    XDISPLOC=<X display>

    设置

    X

    显示位置,

    NEW_ENV=<var, val>

    设置环境变量。
  • -T, --upload-file <file>

    : 这会将指定的本地文件传输到远程

    URL

    ,如果指定的

    URL

    中没有文件部分,

    curl

    将附加本地文件名,请注意,您必须在最后一个目录上使用尾随

    /

    来真正证明

    curl

    没有文件名,否则

    curl

    会认为您的最后一个目录名是要使用的远程文件名,这很可能会导致上载操作失败,如果在

    HTTP

    S

    )服务器上使用,则将使用

    PUT

    命令,使用文件名

    -

    来使用

    stdin

    而不是给定的文件,或者,可以指定文件名

    .

    (单个句点)而不是

    -

    ,以便在非阻塞模式下使用

    stdin

    ,以便在上载

    stdin

    时读取服务器输出。
  • --tcp-nodelay

    : 打开

    TCP_NODELAY

    选项,有关此选项的详细信息,请参阅

    curl_easy_setopt

    手册页,在

    7.11.2

  • --tftp-blksize <value>

    TFTP

    ,设置

    TFTP BLKSIZE

    选项(必须大于

    512

    ),这是

    curl

    在向

    TFTP

    服务器传输数据或从

    TFTP

    服务器传输数据时尝试使用的块大小,默认情况下,将使用

    512

    字节,如果多次使用此选项,将使用最后一个选项,在

    7.20.0

  • --tlsauthtype <authtype>

    TLS

    身份验证类型,目前,

    TLS-SRP

    RFC 5054

    )唯一支持的选项是

    SRP

    ,如果指定了

    --tlsuser

    --tlspassword

    ,但未指定

    --tlsauthtype

    ,则此选项默认为

    SRP

    7.21.4

  • --tlspassword <password>

    : 设置密码以用于用

    --tlsauthtype

    指定的

    TLS

    身份验证方法,要求同时设置

    --tlsuser

    7.21.4

  • --tlsuser <user>

    : 设置用户名以便与用

    --tlsauthtype

    TLS

    身份验证方法一起使用,要求同时设置

    --tlspassword

    7.21.4

  • --tlsv1.0

    SSL

    curl

    TLS

    TLS

    1.0

    7.34.0

  • --tlsv1.1

    SSL

    curl

    TLS

    TLS

    1.1

    7.34.0

  • --tlsv1.2

    SSL

    curl

    TLS

    TLS

    1.2

    7.34.0

  • --tr-encoding

    HTTP

    curl

    支持的算法之一请求压缩传输编码响应,并在接收数据时解压缩数据,在

    7.21.6

  • --trace <file>

    : 启用所有传入和传出数据(包括描述性信息)到给定输出文件的完整跟踪转储,使用

    -

    作为文件名将输出发送到

    stdout

    ,此选项覆盖以前使用的

    -v, -verbose

    -trace ascii

  • --trace-ascii <file>

    -

    stdout

    ,这与

    --trace

    非常相似,但是省略了十六进制部分,只显示转储的

    ASCII

    部分,它使较小的输出,可能更容易阅读未经训练的人,此选项覆盖以前使用的

    -v

    -verbose

    -trace

  • --trace-time

    : 为

    curl

    显示的每个跟踪或详细行预先准备一个时间戳,在

    7.14.0

  • -u, --user <user:password>

    : 指定用于服务器身份验证的用户名和密码,重写

    -n

    -netrc

    --netrc

    可选,如果只指定用户名,

    curl

    将提示输入密码,用户名和密码在第一个冒号上分开,这样就不可能在用户名中使用带有此选项的冒号,密码仍然可以,将

    Kerberos V5

    与基于

    Windows

    的服务器一起使用时,应在用户名中包含

    Windows

    域名,以便服务器成功获取

    Kerberos

    票证,如果不这样做,那么初始身份验证握手可能会失败,当使用

    NTLM

    时,可以简单地将用户名指定为用户名,而不指定域。
  • -U, --proxy-user <user:password>

    : 指定用于代理身份验证的用户名和密码,如果您使用启用了

    Windows SSPI

    curl

    二进制文件并进行协商或

    NTLM

    身份验证,那么您可以通过指定一个冒号来告诉

    curl

    从您的环境中选择用户名和密码,该冒号带有以下选项:

    -U

  • --url <URL>

    : 指定要获取的

    URL

    ,当您要在配置文件中指定

    URL

    时,此选项非常方便,此选项可以使用任意次数,要控制此

    URL

    的写入位置,请使用

    -o, --output

    -o, --remote name

  • -v, --verbose

    : 输出详细信息,主要用于调试,以

    >

    开头的行表示

    curl

    发送的头数据,

    <

    表示

    curl

    接收的在正常情况下隐藏的头数据,以*开头的行表示

    curl

    提供的附加信息,请注意,如果您只希望在输出中使用

    HTTP

    头,那么您可能需要

    -i, -include

    选项,如果您认为此选项仍然不能提供足够的详细信息,请考虑改用

    --trace

    --trace ascii

    --trace ascii

    --trace

    -s, --silent

    curl

    安静。
  • -w, --write-out <format>

    : 定义操作完成并成功后在标准输出上显示的内容,格式是一个字符串,可以包含纯文本和任意数量的变量,字符串可以指定为

    string

    ,要从特定文件中读取,您可以将其指定为

    @filename

    ,并告诉

    curl

    stdin

    中读取格式,您可以编写

    @-

    ,输出格式中的变量将被

    curl

    认为合适的值或文本替换,如下所述,所有变量都指定为%

    {variable_name}

    ,要输出一个普通的%只需将它们写为%%,您可以使用

    \n

    、带

    \r

    的回车符和带

    \t

    的制表符来输出换行符,可能的值为

    content_type

    filename_effective

    ftp_entry_path

    http_code

    http_connect

    local_ip

    local_port

    num_connects

    num_redirects

    redirect_url

    remote_ip

    remote_port

    size_download

    size_header

    size_request

    size_upload

    speed_download

    speed_upload

    ssl_verify_result

    time_appconnect

    time_connect

    time_namelookup

    time_pretransfer

    time_redirect

    time_starttransfer

    time_total

    url_effective

  • -x, --proxy <[protocol://][user:password@]proxyhost[:port]>

    : 使用指定的代理,可以使用

    protocol://

    前缀指定代理字符串,以指定备用代理协议,使用

    socks4://

    socks4a://

    socks5://

    socks5h://

    请求要使用的特定

    SOCKS

    版本,没有指定协议,

    http://

    和所有其他协议都将被视为

    http

    代理,(在

    curl7.21.7

    中添加了协议支持)如果代理字符串中未指定端口号,则假定端口号为

    1080

    ,此选项将覆盖将代理设置为使用的现有环境变量,如果有环境变量设置代理,则可以将代理设置为以覆盖它,通过

    HTTP

    代理执行的所有操作都将透明地转换为

    HTTP

    ,这意味着某些特定于协议的操作可能不可用,如果您可以通过代理进行隧道传输(如使用

    -p

    -proxytunnel

    选项时),则情况并非如此,代理字符串中可能提供的用户和密码由

    curl

    进行

    URL

    解码,这允许您通过使用

    %40

    传入特殊字符,如

    @

    ,或用

    %3a

    传入冒号,可以使用与代理环境变量完全相同的方式指定代理主机,包括协议前缀(

    http://

    )和嵌入的用户

    +

    密码,如果多次使用此选项,将使用最后一个选项。
  • -X, --request <command>

    HTTP

    ,指定与

    HTTP

    服务器通信时要使用的自定义请求方法,将使用指定的请求,而不是使用其他方法(默认为

    GET

    ),有关详细信息和解释,请阅读

    HTTP1.1

    规范,常见的附加

    HTTP

    请求包括

    PUT

    DELETE

    ,但

    WebDAV

    等相关技术提供了

    PROPFIND

    COPY

    MOVE

    等功能,通常你不需要这个选项,各种

    GET

    HEAD

    POST

    PUT

    请求都是通过使用专用的命令行选项来调用的,此选项仅更改

    HTTP

    请求中使用的实际单词,不改变

    curl

    的行为方式,因此,例如,如果您想要发出一个正确的

    HEAD

    请求,那么使用

    -X HEAD

    将是不够的,你需要使用

    -I, -head

  • --xattr

    : 将输出保存到文件时,此选项告诉

    curl

    将某些文件元数据存储在扩展文件属性中,当前,

    URL

    存储在

    xdg.origin.url

    属性,对于

    HTTP

    ,内容类型存储在

    mime

    类型属性中,如果文件系统不支持扩展属性,将发出警告。
  • -y, --speed-time <time>

    : 如果在某个速度时间段内下载速度低于每秒的速度限制字节数,则下载将被中止,如果使用速度时间,则默认速度限制将为

    1

    -Y

    设置,此选项控制传输,因此不会影响慢速连接等,如果您担心此问题,请尝试

    --connect timeout

  • -Y, --speed-limit <speed>

    : 如果下载速度低于此给定速度(以字节

    /

    秒为单位)达数秒,则会中止下载,速度时间设置为

    -y

    ,如果未设置,则为

    30

  • -z, --time-cond <date expression>|<file>

    HTTP/FTP

    )请求在给定的时间和日期之后修改的文件,或在该时间之前修改的文件,

    <date expression>

    可以是各种日期字符串,或者如果它与任何内部字符串都不匹配,则将其作为文件名并尝试从

    <file>

    获取修改日期

    mtime

    ,有关日期表达式的详细信息,请参阅

    getdate

    手册页,以破折号

    -

    开始日期表达式,使其请求比给定日期

    /

    时间早的文档,默认值是比指定日期

    /

    时间新的文档,如果多次使用此选项,将使用最后一个选项。
  • -h, --help

    : 输出帮助信息。
  • -M, --manual

    : 手动模式,显示详细的帮助文本。
  • -V, --version

    : 输出版本信息。

环境变量

使用环境变量设置代理与使用

--proxy

选项具有相同的效果。

  • http_proxy [protocol://]<host>[:port]

    : 设置用于

    HTTP

    的代理服务器。
  • HTTPS_PROXY [protocol://]<host>[:port]

    HTTPS

  • [url-protocol]_PROXY [protocol://]<host>[:port]

    : 设置要用于

    [url protocol]

    的代理服务器,其中协议是

    curl

    支持的协议,并在

    url

    中指定,

    FTP

    FTPS

    POP3

    IMAP

    SMTP

    LDAP

    等。
  • ALL_PROXY [protocol://]<host>[:port]

    : 如果未设置协议特定的代理,则设置要使用的代理服务器。
  • NO_PROXY <comma-separated list of hosts>

    : 不应通过任何代理的主机名列表,如果仅设置为星号

    *

    ,则与所有主机匹配。

代理协议前缀

  • socks4://

    : 使其等效于

    --socks4

  • socks4a://

    : 使其相当于

    --socks4a

  • socks5://

    --socks5

  • socks5h://

    --socks5-hostname

退出代码

  • 1

    : 不支持的协议,

    curl

    的这个版本不支持这个协议。
  • 2

    : 初始化失败。
  • 3

    URL

    格式不正确,语法不正确。
  • 4

    : 执行所需请求所需的功能或选项在生成时未启用或显式禁用,要使

    curl

    能够做到这一点,您可能需要另一个

    libcurl

    构建。
  • 5

    : 无法解析代理,无法解析给定的代理主机。
  • 6

    : 无法解析主机,未解析给定的远程主机。
  • 7

    : 无法连接到主机。
  • 8

    FTP

    服务器回复,服务器发送的数据无法解析。
  • 9

    FTP

    访问被拒绝,服务器拒绝登录或拒绝访问您要访问的特定资源或目录,通常,您试图更改到服务器上不存在的目录。
  • 11

    : 通过回复,

    curl

    无法分析发送给

    PASS

    请求的回复。
  • 13

    FTP

    奇怪的

    PASV

    回复,

    curl

    无法解析发送到

    PASV

  • 14

    FTP-227

    格式,

    curl

    无法解析服务器发送的

    227

    行。
  • 15

    FTP

    无法获取主机,无法解析

    227

    行中的主机

    IP

  • 17

    FTP

    无法设置二进制文件,无法将传输方法更改为二进制。
  • 18

    : 部分文件,只传输了文件的一部分。
  • 19

    FTP

    无法下载

    /

    访问给定文件,

    RETR

    (或类似)命令失败。
  • 21

    FTP

    报价错误,

    quote

    命令从服务器返回错误。
  • 22

    : 未检索到

    HTTP

    页,找不到请求的

    url

    或返回另一个错误,

    HTTP

    错误代码为

    400

    或更高,此返回代码仅在使用

    -f, -fail

    时出现。
  • 23

    : 写入错误,

    curl

    无法将数据写入本地文件系统或类似文件系统。
  • 25

    FTP

    无法保存文件,服务器拒绝了用于

    FTP

    上载的

    STOR

    操作。
  • 26

    : 读取错误,各种各样的阅读问题。
  • 27

    : 内存不足,内存分配请求失败。
  • 28

    : 操作超时,已根据条件达到指定的超时期限。
  • 30

    FTP

    端口失败,端口命令失败,并非所有

    FTP

    服务器都支持

    PORT

    命令,请尝试使用

    PASV

    进行传输。
  • 31

    FTP

    无法使用

    REST

    REST

    命令失败,此命令用于恢复

    FTP

  • 33

    HTTP

    范围错误,范围命令不起作用。
  • 34

    HTTP post

    错误,内部

    post

    请求生成错误。
  • 35

    SSL

    连接错误,

    SSL

    握手失败。
  • 36

    FTP

    错误下载恢复,无法继续先前中止的下载。
  • 37

    FILE

    无法读取文件,无法打开文件,可能是权限问题。
  • 38

    LDAP

    无法绑定,

    LDAP

    绑定操作失败。
  • 39

    LDAP

    搜索失败。
  • 41

    : 未找到函数,找不到所需的

    LDAP

    函数。
  • 42

    : 被回调中止,一个应用程序告诉

    curl

    中止操作。
  • 43

    : 内部错误,使用错误的参数调用了函数。
  • 45

    : 接口错误,无法使用指定的传出接口。
  • 47

    : 重定向过多,跟随重定向时,

    curl

    达到最大数量。
  • 48

    libcurl

    指定了未知选项,这表示您向

    curl

    传递了一个奇怪的选项,该选项被传递给

    libcurl

    并被拒绝,仔细阅读手册。
  • 49

    telnet

    选项格式错误。
  • 51

    : 对等方的

    SSL

    证书或

    SSH MD5

    指纹不正常。
  • 52

    : 服务器没有回复任何内容,这被认为是一个错误。
  • 53

    : 找不到

    SSL

    加密引擎。
  • 54

    : 无法将

    SSL

    加密引擎设置为默认值。
  • 55

    : 发送网络数据失败。
  • 56

    : 接收网络数据失败。
  • 58

    : 本地证书有问题。
  • 59

    : 无法使用指定的

    SSL

    密码。
  • 60

    : 对等证书不能用已知的

    CA

    证书进行身份验证。
  • 61

    : 无法识别的传输编码。
  • 62

    LDAP URL

    无效。
  • 63

    : 超过最大文件大小。
  • 64

    : 请求的

    FTP SSL

    级别失败。
  • 65

    : 发送数据需要倒带失败。
  • 66

    : 无法初始化

    SSL

    引擎。
  • 67

    : 用户名、密码或类似内容未被接受,

    curl

    无法登录。
  • 68

    TFTP

    服务器上找不到文件。
  • 69

    TFTP

    服务器上的权限问题。
  • 70

    TFTP

    服务器上的磁盘空间不足。
  • 71

    TFTP

    操作非法。
  • 72

    : 未知的

    TFTP

    传输

    ID

  • 73

    : 文件已存在

    TFTP

  • 74

    : 没有这样的用户

    TFTP

  • 75

    : 字符转换失败。
  • 76

    : 需要字符转换函数。
  • 77

    : 读取

    SSL CA

    证书(路径)时出现问题,可能是访问权限问题。
  • 78

    URL

    中引用的资源不存在。
  • 79

    SSH

    会话期间发生未指定的错误。
  • 80

    : 无法关闭

    SSL

    连接。
  • 82

    : 无法加载

    CRL

    文件,缺少或格式错误,在

    7.19.0

  • 83

    : 发卡机构检查失败,在

    7.19.0

  • 84

    FTP PRET

    命令失败。
  • 85

    RTSP:CSeq

    编号不匹配。
  • 86

    RTSP

    会话标识符不匹配。
  • 87

    : 无法解析

    FTP

    文件列表。
  • 88

    FTP

    区块回调报告错误。
  • 89

    : 没有可用的连接,会话将排队。
  • XX

    : 更多的错误代码将出现在这里,在未来的版本,现有的是永远不会改变的。

示例

对网站发起一个

HTTP

请求。

curl www.baidu.com
           

curl

显示进度表,以指示传输速率、传输的数据量、剩余时间等。

curl -# -o ftp://ftp.example.com/file.zip
           

指定请求的网络接口。

curl --interface ppp0 192.168.113.131
           

将文件下载到本地并命名为

1.zip

curl -o 1.zip ftp://ftp.example.com/file.zip
           

curl

使用地址重定向。

curl -L http://www.google.com
           

此选项限制数据传输速率的上限,并将其保持在以字节为单位的给定值附近。

curl --limit-rate 1000K -O ftp://speedtest.tele2.net/1MB.zip
           

curl

还提供了从用户认证的

FTP

服务器下载文件的选项。

curl -u username:password -O ftp://test.rebex.net/readme.txt
           

显示详细信息,例如连接的

ip

地址、请求头与响应头等。

curl -v www.baidu.com
           

设置请求头信息,此处由于响应信息过多将其存储在

baidu.html

curl -v \
-H "Accept-Language: zh-cn" \
-H "Host: www.baidu.com" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" \
-o baidu.html https://www.baidu.com
           

每日一题

https://github.com/WindrunnerMax/EveryDay
           

参考

https://www.computerhope.com/unix/curl.htm
https://www.commandlinux.com/man-page/man1/curl.1.html
https://www.geeksforgeeks.org/curl-command-in-linux-with-examples/