Skip to content

Latest commit

 

History

History
364 lines (328 loc) · 66.8 KB

curl命令.md

File metadata and controls

364 lines (328 loc) · 66.8 KB

curl命令

curl是一个命令行工具,用于使用任何受支持的协议HTTPFTPIMAPPOP3SCPSFTPSMTPTFTPTELNETLDAPFILE向网络服务器传输数据或从网络服务器传输数据,其被设计成无需用户交互即可工作,因此非常适合在shell脚本中使用,该软件提供代理支持、用户身份验证、FTP上传、HTTP postingSSL连接、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是使用支持NPNSSL库构建的,则NPN默认启用,支持HTTP 2libcurl使用NPNhttps会话期间与服务器协商对HTTP 2的支持,在7.36.0添加。
  • --no-alpn: 禁用ALPN TLS扩展,如果libcurl是用一个支持ALPNSSL库构建的,那么ALPN默认启用,支持HTTP 2libcurl使用ALPNhttps会话期间与服务器协商对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-headerHTTP头保存到文件中,如果多次使用此选项,将使用最后一个选项。
  • -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记录并使用cookiecookie引擎,另一种激活它的方法是使用-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.htmlNSS密码的实现方式与OpenSSLGnuTLS不同,NSS密码的完整列表位于以下URLNSSCipherSuite条目中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,要在使用FTPSFTP时创建远程目录,请尝试--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=lousypost块,如果数据以@开头,其余的应该是从中读取数据的文件名,如果要从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传输时禁用EPRTLPRT命令,curl通常会首先尝试使用EPRT,然后在使用PORT之前使用LPRT,但是有了这个选项,它会立即使用PORTEPRTLPRT是原始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,使curllocation:header后面自动设置上一个URLauto字符串可以单独使用,即使您没有设置初始--referer,如果多次使用此选项,将使用最后一个选项。
  • -E, --cert <certificate[:password]>: SSL,告诉curl在使用HTTPSFTPS或其他基于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提供的证书是什么类型的证书,PEMDERENG是公认的类型,如果未指定,则假定为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,这种方法不是故障安全的,有时会出现不成功的响应代码,特别是在涉及身份验证时,例如响应代码401407
  • -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,当FTPsftp url/操作使用服务器上当前不存在的路径时,curl的标准行为是失败,使用此选项,curl将尝试创建丢失的目录。
  • --ftp-method [method]: FTP,控制curl应该使用什么方法访问FTP(S)服务器上的文件,在7.15.1添加,方法参数应该是以下选项之一:
    • multicwd: curl对给定URL中的每个路径部分执行一个CWD操作,对于深层层次结构,这意味着有很多命令,RFC1738就是这么说明的,这是默认但最慢的行为。
    • nocwd: curl根本不做CWDcurl将执行SIZERETRSTOR等操作,并为所有这些命令提供到服务器的完整路径,这是最快的行为。
    • 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不要使用服务器在响应curlPASV命令时建议的IP地址,相反,curl将重用它已经用于控制连接的相同IP地址,在7.14.2增加,如果使用PORTEPRTEPSV代替PASV,则此选项无效。
  • --ftp-pret: FTP,告诉curlPASVEPSV之前发送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: FTPFTP登录需要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个十六进制数字的字符串,字符串应该是远程主机公钥的128MD5校验和,除非md5 sums匹配,否则curl将拒绝与主机的连接,在7.17.1增加。
  • --ignore-content-length: HTTP,忽略内容长度标题,这对于运行Apache1.x的服务器尤其有用,后者将报告大于2G的文件的不正确内容长度。
  • -i, --include: HTTP,在输出中包括HTTP头,HTTP头包括服务器名称、文档日期、HTTP版本等内容。
  • -I, --head: HTTP/FTP/FILE,仅获取HTTPHTTP服务器的特点是响应头,它只用来获取文档的头,当用于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-,使curlstdin读取文件。
  • --keepalive-time <seconds>: 此选项设置在发送keepalive探测之前连接需要保持空闲的时间以及各个keepalive探测之间的时间,它目前在提供TCP_KEEPIDLETCP_KEEPINTVL套接字选项的操作系统上非常有效(指Linux、最近的AIXHP-UX等),如果使用--no keepalive, 则此选项无效,(在7.18.0中添加)如果多次使用此选项,将使用最后一个选项,如果未指定,则该选项默认为60秒。
  • --key <key>: SSL/SSH,私钥文件名,允许您在此单独的文件中提供私钥,如果多次使用此选项,将使用最后一个选项。
  • --key-type <type>: SSL,私钥文件类型,指定--key提供的私钥是哪种类型,支持DERPEMENG, 如果未指定,则假定为PEM,如果多次使用此选项,将使用最后一个选项。
  • --krb <level>: FTP,启用Kerberos身份验证和使用,必须输入级别,并且级别应为clearsafesecretaryprivate之一,如果您使用的级别不是这些级别之一,则将改用private,此选项需要使用kerberos4支持构建的库,这并不常见,使用-V, -version查看卷曲是否支持它,如果多次使用此选项,将使用最后一个选项。
  • -l, --list-only: FTP,列出FTP目录时,此开关强制使用仅名称视图,如果用户希望机器解析FTP目录的内容,这尤其有用,因为普通目录视图不使用标准的外观或格式,这样使用时,该选项将导致向服务器发送NLST命令,而不是LIST,注意: 一些FTP服务器在响应NLST时只列出文件,它们不包括子目录和符号链接,POP3POP3检索特定电子邮件时,此开关强制执行LIST命令而不是RETR,如果用户希望查看服务器上是否存在特定的消息id以及它的大小,那么这一点特别有用,注意: 当与-X, -request<command>组合使用时,此选项可用于发送UIDL命令,因此用户可以使用电子邮件的唯一标识符而不是其消息id来发出请求,在7.21.5增加。
  • -L, --location: HTTP/HTTPS,如果服务器报告请求的页面已移动到其他位置(用location:header3XX响应代码表示),此选项将使curl在新位置上重做请求,如果与-i, --include-i, --head一起使用,将显示所有请求页面的标题,使用身份验证时,curl只将其凭据发送到初始主机,如果重定向将curl带到另一个主机,它将无法截获用户+密码,另请参见--location trusted,了解如何更改此设置,您可以使用--max redirs选项来限制要遵循的重定向数量,当curl遵循重定向并且请求不是纯GET(例如POSTPUT)时,如果HTTP响应是301302303,它将使用GET执行以下请求,如果响应代码是任何其他3xx代码,curl将使用相同的未修改方法重新发送以下请求,您可以告诉curl不要更改non-GET请求方法,以便在30x响应之后使用专用选项--post301-post302-post303获取。
  • --libcurl <file>: 将此选项附加到任何普通的curl命令行,您将获得一个libcurl,它使用C源代码编写到文件中,执行与命令行操作相同的操作!如果多次使用此选项,将使用最后给定的文件名,7.16.1增加。
  • --limit-rate <speed>: 指定您希望curl使用的最大传输速率-用于下载和上载,如果您有一个有限的管道,并且希望您的传输不使用整个带宽,则此功能非常有用,使它比其他情况下慢,给定的速度以字节/秒为单位,除非附加后缀,加上kk将把数字计为千字节,mm表示兆字节,而gg表示千兆字节,例如: 200K3m1G,给定的速率是整个传输过程中计算的平均速度,这意味着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>: 指定服务器身份验证期间要使用的登录选项,您可以使用登录选项指定身份验证期间可能使用的特定于协议的选项,目前只有IMAPPOP3SMTP支持登录选项,有关登录选项的更多信息,请参阅RFC 2384RFC 5092IETF草稿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,注意: 文件大小在下载之前并不总是已知的,对于这样的文件,即使文件传输最终超过这个给定的限制,这个选项也不起作用,这涉及到FTPHTTP传输。
  • --mail-rcpt <address>: (SMTP)指定单个地址、用户名或邮件列表名称,在执行邮件传输时,收件人应指定要将邮件发送到的有效电子邮件地址,(在7.20.0中添加)执行地址验证(VRFY命令)时,应将收件人指定为用户名或用户名和域(根据RFC53213.5节),(在7.34.0中添加)在执行邮件列表扩展(EXPN命令)时,应该使用邮件列表名称指定收件人,例如FriendsLondon 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-APISSPI支持构建的库,使用-V, -version查看curl是否支持GSS-API/SSPISPNEGO,使用此选项时,还必须提供假-u, -user选项以正确激活身份验证代码,发送-u就足够了,因为实际上没有使用-u选项中的用户名和密码,如果多次使用此选项,则只使用第一个选项。
  • --no-keepalive: 禁用在TCP连接上使用keepalive消息,因为默认情况下curl会启用它们,请注意,这是已记录的否定选项名称,因此,可以使用--keepalive来强制执行keepalive
  • --no-sessionid: SSL,禁用curlSSL会话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 basicBasiccurl用于代理的默认身份验证方法。
  • --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,向远程FTPSFTP服务器发送任意命令,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.1FTPSFTP服务器或本地文件检索字节范围(即部分文档),可以通过多种方式指定范围。
  • -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尝试执行传输时返回暂时性错误,它将在放弃之前重试此次数,将数字设置为0将使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不要绕过SSL3TLS1.0协议中称为BEAST的安全缺陷,如果不使用此选项,SSL层可能会使用已知的解决方法来解决某些较旧的SSL实现的互操作性问题,警告: 此选项会降低SSL安全性,通过使用此标志,您会要求完全相同的安全性,在7.25.0中添加。
  • --socks4 <host[:port]>: 使用指定的SOCKS4代理,如果未指定端口号,则假定在端口1080处,(7.15.2增加)此选项将覆盖以前使用的任何-x, --proxy,因为它们是互斥的,从7.21.7开始,此选项是多余的,因为您可以使用socks4://协议前缀指定具有-x, --proxysocks4代理,如果多次使用此选项,将使用最后一个选项。
  • --socks4a <host[:port]>: 使用指定的SOCKS4a代理,如果未指定端口号,则假定在端口1080处,(在7.18.0中添加)此选项将覆盖以前使用的任何-x, --proxy,因为它们是互斥的,从7.21.7开始,此选项是多余的,因为您可以使用socks4a://协议前缀指定具有-x, -proxysocks4a代理,如果多次使用此选项,将使用最后一个选项。
  • --socks5-hostname <host[:port]>: 使用指定的SOCKS5代理(并让代理解析主机名),如果未指定端口号,则假定在端口1080处,(在7.18.0中添加)此选项将覆盖以前使用的任何-x, --proxy,因为它们是互斥的,从7.21.7开始,此选项是多余的,因为您可以使用socks5h://协议前缀指定带有-x, -proxysocks5主机名代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作--socks,但没有附加数字)。
  • --socks5 <host[:port]>: 使用指定的SOCKS5代理-但在本地解析主机名,如果未指定端口号,则假定在端口1080处,此选项将覆盖以前使用的任何-x, --proxy,因为它们是互斥的,从7.21.7开始,此选项是多余的,因为您可以使用socks5://协议前缀指定带有-x, -proxysocks5代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作--socks,但没有附加数字),此选项(以及--socks4)不适用于IPV6FTPSLDAP
  • --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 SSPIcurl二进制文件并进行协商或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,并告诉curlstdin中读取格式,您可以编写@-,输出格式中的变量将被curl认为合适的值或文本替换,如下所述,所有变量都指定为%{variable_name},要输出一个普通的%只需将它们写为%%,您可以使用\n、带\r的回车符和带\t的制表符来输出换行符,可能的值为content_typefilename_effectiveftp_entry_pathhttp_codehttp_connectlocal_iplocal_portnum_connectsnum_redirectsredirect_urlremote_ipremote_portsize_downloadsize_headersize_requestsize_uploadspeed_downloadspeed_uploadssl_verify_resulttime_appconnecttime_connecttime_namelookuptime_pretransfertime_redirecttime_starttransfertime_totalurl_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请求包括PUTDELETE,但WebDAV等相关技术提供了PROPFINDCOPYMOVE等功能,通常你不需要这个选项,各种GETHEADPOSTPUT请求都是通过使用专用的命令行选项来调用的,此选项仅更改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中指定,FTPFTPSPOP3IMAPSMTPLDAP等。
  • 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无法使用RESTREST命令失败,此命令用于恢复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/