4月 242014
 

缘起

由于需要,引入了rc4加密算法,网上搜到了一些PHP实现,Java实现,当然,对于PHP来讲,还有openssl的实现。

网址: http://zhiwei.li/text/2011/08/7777777777777777777/

上还证明了PHP的实现和openssl的实现是相同的,由于该网址有测试例子,自己执行一边,果然如该网址所言。

由于存在java实现的需要 ,于是就测试一下,java实现和PHP实现是否相同,由于PHP的实现和openssl的实现相同,于是只比较了openssl 和java的解密结果,果然不让人省心,结果是:不同!

开始折腾

好在rc4的算法比较简单,怀疑可能是网上找到的java版本实现有问题,参考PHP的实现,自己实现了一遍java版本,结果让人纠结,自己实现的和网上找到的结果完全一样,问题在哪里?

当我再次比较openssl和php的加密结果时:发现加密结果100%不同。事情进展到这个地步,更显扑朔迷离,怀疑自己原来测试的有问题,再次测试N边,依然没有问题,其不叫人发疯。

最后,再拿出 http://zhiwei.li/text/2011/08/7777777777777777777/ 来研究;发现里面的key是md5一个密钥字符串后再pack得到的,这个也有关系?试试吧,果然有关系。至此,想起来自己两次测试使用的key是不同的,成功的那次测试,key刚好也是16字节的,而失败的那次测试的key是“testkey”,才想起来,openssl在做加密时,如果key不够长(16字节),则会在后面补 “\0″(是零,不是圈儿),但是自己实现的RC4算法,是没有在key后面补 “\0” 的。

真相大白。

郁闷啊

附测试脚本:

 

 

 

 Posted by at 下午 6:54
4月 152014
 

几个命令:

-e 选项是加密的意思,默认为加密,所以可以不写, 如果解密则 -d

 

直接通过openssl命令完成加密解密的测试:

 

参考资料:

对称加解密命令: http://blog.csdn.net/fym0121/article/details/7984733

摘要命令: http://blog.csdn.net/fym0121/article/details/7982620

rsa: http://blog.csdn.net/fym0121/article/details/7987869

http://blog.csdn.net/boss666666/article/details/10284649

http://www.cnblogs.com/kangtr/archive/2008/05/17/1201205.html

ocsp:http://isrlabs.net/wordpress/?p=169

ocsp:  http://backreference.org/2010/05/09/ocsp-verification-with-openssl/

 Posted by at 下午 7:24
1月 262013
 

使用openssl生成密钥对:

 

java代码:

1. 注意: java 语言本身没有实现base64编码,而openssl生成的密钥对一般做base64编码,便于维护,所以这里引用了 org.apache.commons.codec.binary.Base64;

 

稍后提供一个PHP加密Java解密的实现

 

参考资料:

http://stackoverflow.com/questions/11787571/how-to-read-pem-file-to-get-private-and-public-key

http://stackoverflow.com/questions/8647165/how-to-sign-a-generic-text-with-rsa-key-and-encode-with-base64-in-java

http://www.javamex.com/tutorials/cryptography/rsa_encryption.shtml

http://snowolf.iteye.com/blog/381767

密钥结构及格式: https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem

 

 

 

 Posted by at 下午 8:22
12月 162012
 

根证书


在密码学和计算机安全领域中,根证书是未被签名的公钥证书或自签名的证书。根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任

从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名,要验证一份证书的真伪(即验证CA中心对该证书信息的签名是否有效),需要用CA 中心的公钥验证,而CA中心的公钥存在于对这份证书进行签名的证书内,故需要下载该证书,但使用该证书验证又需先验证该证书本身的真伪,故又要用签发该证书的证书来验证,这样一来就构成一条证书链的关系,这条证书链在哪里终结呢?答案就是根证书,根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明您对该根证书以下所签发的证书都表示信任,而技术上则是建立起一个验证证书信息的链条,证书的验证追溯至根证书即为结束。所以说用户在使用自己的数字证书之前必须先下载根证书。

自签名证书


自签名证书是其签发者(签名者)与主题(其公共密钥由该证书进行验证的实体)相同的证书

 

未签名证书与自签名证书


  1. 二者都无法校验其身份的真实性
  2. 自签名证书通过“用户确认”(信任该颁发结构,其实还是自己)可以完成其校验流程;未签名证书不知道颁发机构是谁,就算知道是谁,也因为没有签名而无法校验。

证书链


证书链由两个环节组成—信任锚(CA 证书)环节和已签名证书环节。自我签名的证书仅有一个环节的长度—信任锚环节就是已签名证书本身。

证书链可以有任意环节的长度,所以在三节的链中,信任锚证书CA 环节可以对中间证书签名;中间证书的所有者可以用自己的私钥对另一个证书签名。CertPath API 可以用来遍历证书链以验证有效性,也可以用来构造这些信任链。

Web 浏览器已预先配置了一组浏览器自动信任的根 CA 证书。来自其他证书授权机构的所有证书都必须附带证书链,以检验这些证书的有效性。证书链是由一系列 CA 证书发出的证书序列,最终以根 CA 证书结束。

证书最初生成时是一个自签名证书。自签名证书是其签发者(签名者)与主题(其公共密钥由该证书进行验证的实体)相同的证书。如果拥有者向 CA 发送证书签名请求 (CSR),然后输入响应,自签名证书将被证书链替换。链的底部是由 CA 发布的、用于验证主题的公共密钥的证书(回复)。链中的下一个证书是验证 CA 的公共密钥的证书。通常,这是一个自签名证书(即,来自 CA、用于验证其自身的公共密钥的证书)并且是链中的最后一个证书。

在其他情况下,CA 可能会返回一个证书链。在此情况下,链的底部证书是相同的(由 CA 签发的证书,用于验证密钥条目的公共密钥),但是链中的第二个证书是由其他 CA 签发的证书,用于验证您向其发送了 CSR 的 CA 的公共密钥。然后,链中的下一个证书是用于验证第二个 CA 的密钥的证书,依此类推,直至到达自签名的根证书。因此,链中的每个证书(第一个证书之后的证书)都需要验证链中前一个证书的签名者的公共密钥。

 

代码签名


http://baike.baidu.com.cn/view/480143.htm

 Posted by at 下午 1:47
11月 222012
 

 

最简单快捷的方法,打开Terminal,使用openssl生成私钥和自签名的x509证书。

按照命令行的提示输入内容就行了。

几个说明:

public_key.der是输出的自签名的x509证书,即我们要用的。

private_key.pem是输出的私钥,用来解密的,请妥善保管。

rsa:1024这里的1024是密钥长度,1024是比较安全的,如果需要更安全的话,可以用2048,但是加解密代价也会增加。

-days:证书过期时间,一定要加上这个参数,默认的证书过期时间是30天,一般我们不希望证书这么短就过期,所以写上比较合适的天数,例如这里的3650(10年)。

事实上,这一行命令包含了好几个步骤(我研究下面这些步骤的原因是我手头已经由一个private_key.pem私钥了,想直接用这个来生成x509证书,也就是用到了下面的2-3)

1)创建私钥

2)创建证书请求(按照提示输入信息)

3)自签署根证书

 

摘自: http://blog.iamzsx.me/show.html?id=155002

参考资料:

http://blog.csdn.net/jinglijun/article/details/7770301

http://blog.csdn.net/jinglijun/article/details/7770411

 

PHP 使用证书加密、私钥解密:

 

 Posted by at 下午 11:31
2月 012012
 

使用iframe来做post方式的跨域访问,通过iframe的onload事件来监听请求是否完成。
原来以为iframe的onload的事件也有跨域的限制,测试了一下,是没有的,测试了IE、火狐、safari都很好使。

原文链接:https://phpor.net/blog/post/966
 Posted by at 上午 5:30
12月 042010
 

Tomboy可以和本地目录同步,也可以和网上存储服务同步;关于和网上存储服务同步的认证机制比较有意思。

        

  1. 在Tomboy中配置url
  2.     

  3. 在浏览器中填写用户名、密码登录,然后给自己的pc起个名字
  4.     

  5. 认证成功后,服务器生成一个token将浏览器重定向到localhost:8000,将这个token告诉给Tomboy客户端;显然Tomboy监听了8000端口。 (http://localhost:8000/tomboy-web-sync/?oauth_token=WL*********&oauth_verifier=dbd69e0b-45d********&return=https://one.ubuntu.com)
        
  6.     

  7. 然后Tomboy客户端和服务器之间约定了一个长期有效的密码,每次同步不需要重新验证
原文链接:https://phpor.net/blog/post/769
 Posted by at 下午 11:02
9月 152010
 

cURL.1 手册页

名称

cURL – transfer a URL

摘要

cURL[选项] [URL… ]

描述

cURL是一个向服务器或从服务器传输数据的工具,它支持HTTP 、HTTPS、FTP 、 FTPS 、 SCP、SFTP、TFTP、DICT、TELNET、LDAP或FILE等协议。该命令设计为无需用户干预即可执行。

cURL提供了一大堆诸如代理支持、用户认证、FTP上传、HTTP POST、SSL连接、Cookies、文件续传等等有用的技巧。正如你将在下面看到的,如此多的特性会让你头晕目眩!

cURL的所有传输相关特性的是由libcURL所支持。详情见libcURL (3)

URL:

URL语法是协议相关的。您可在RFC 3986找到详细解释。

您可以指定多个URL或在大括号{}内写入URL的一部分形成URL的集合:

http://site.{one,two,three}.com

或者您也可以使用[ ]获得连续的字母或数字序列:

ftp://ftp.numericals.com/file[1-100].txt ftp://ftp.numericals.com/file[001-100].txt (前面带有0的) ftp://ftp.letters.com/file[a-z].txt

目前还不支持嵌套的序列,但是您可以在一条URL中混合使用多个序列:

http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html

您可在命令行中指定任意数量的URL。它们将以指定的顺序被逐一获取。

从cURL 7.15.1版以来,您也可以指定步长范围,如此您就可以得到所有带第N个数字或字母的URL:

http://www.numericals.com/file[1-100:10].txt  http://www.letters.com/file[a-z:2].txt

如果您指定的URL没有协议://前缀,cURL会尝试猜测您可能需要的协议。默认使用HTTP协议,但会基于常用主机名前缀而尝试使用其它协议。例如,对于以“FTP”开头的主机名称,cURL将假定使用FTP协议 。

cURL会尝试为多个文件的传输重用连接,从而使从同一台服务器上获取文件不会做多重连接/握手。这种方法提高了速度。当然,这只对在同一命令行中指定的文件有效,而且不能用于单独的cURL之间的调用。

进度指示器

cURL在操作时通常会显示一个进度指示器,显示已传输的数据量、传输速度和估计剩余时间等。

然而,由于cURL默认在终端上显示此数据,如果您调用cURL去做一个向终端写入数据的操作,它将禁用进度指示器,否则它会将进度指示信息与输出的返回数据混淆在一起。

如果您需要对应HTTP POST或PUT请求的进度指示器,您得使用shell的重定向操作符(>)、 -o [文件名]或其他类似的操作,将返回的数据重定向到文件中。

这与FTP上传操作不同,该操作不会向终端输出任何响应数据。

如果您想用进度“条”代替默认的显示, -#选项会很有帮助。

选项

对于所有的布尔选项(option),使用 –option 来启用,使用 —no-option 来禁用。也就是说,您使用完全相同的选项名称,但须加上前缀“no-”然而,在此列表中,我们通常只会列出并显示它们的–option。(–no- option 这个概念是在7.19.0版中添加的。以前大多数选项的开启/关闭是重复使用相同的命令行选项。)

-a/–append

(FTP/SFTP)当在上传操作中使用时,此选项将告诉cURL将内容附加到目标文件,而不是覆盖它。如果该文件不存在,将创建一个新文件。请注意,此标志将被一些SSH服务器所忽略(包括OpenSSH) 。

-A/–user-agent <用户代理字符串>

(HTTP)指定用户代理(User-Agent)字符串发送给HTTP服务器。如果这里没有设置为“ Mozilla/4.0 ”,一些设计的不好的CGI程序将不能正常工作。如字符串包含空白字符,则用单引号括出此字符串。此选项也可用-H/–header来设置。

如果此选项设置超过一次,将使用最近一次的设置。

–anyauth

(HTTP) 告知cURL自己找出远程站点声明支持的最安全的验证方法并使用之。由发送一个请求并检查response-headers来实现,从而可能诱发额外的网络流量。这是用来代替具体验证方法设定,您可配合–basic–digest–ntlm、与–nagotiate使用。

请注意,如果您从标准输入(stdin)上传,则不推荐使用–anyauth,因为它可能需要将数据发送两次而且届时客户端必须支持回卷(rewind)。如从标准输入(stdin)上传时出现此需求,上传操作将失败。

-b/–cookie <name=data>

( HTTP )将数据作为cookie传递给HTTP服务器。这些数据可能是前次从服务器Set-Cookie行返回的。这些数据应是“NAME1=VALUE1; NAME2=VALUE2”这样的格式。

如 果在行中没有使用’=’符号,那么它将被视为一个保存了前次cookie行的文件名,如果此文件与前次保存的cookie行匹配,则它在此会话中将被读 取。使用这种方法也激活会激活 "cookie 解析器" ,它将使cURL同时记录传入的cookie,这样可方便的与-L/–location选项结合使用。被读取cookie的文件格式应为纯文本的HTTP headers或Netscape/Mozilla的cookie文件格式。

请注意,被-b/–cookie指定的文件只能作为输入使用,没有cookies会被存储在文件中。为了存储cookie,用-c/–cookie-jar选项或您甚至可以用-D/–dump-header选项把HTTP header保存到文件中!

如果此选项设置超过一次,将使用最近一次的设置。

-B/–use-ascii

当使用FTP或LDAP时启用ASCII传输。使用FTP时,也可以使用一个以";type=A"结尾的URL来强制执行此选项。此选项导致数据以文本模式发送到Win32系统的标准输出(stdout)。

–basic

( HTTP )告知cURL使用HTTP基本验证。这是默认选项,并且该选项通常是无意义的,除非你用它来覆盖先前设置的不同的身份验证方法的选项,(如–ntlm–digest 、或–negotiate) 。

–ciphers <加密方式列表>

(SSL)具体指定在连接中使用哪些加密方式。列表必须是有效的加密方式。在此网址阅读SSL加密方式列表的细节: http://www.openssl.org/docs/apps/ciphers.html

NSS 加密方式与openssl和GnuTLS不同。NSS 加密方式的完整列表在此网址: http://directory.fedora.redhat.com/docs/mod_nss.html#Directives的NSSCipherSuite条目中。

假如此选项已被使用过多次,则最后一次的设置将取代其它的。

–compressed

( HTTP )使用libcurl支持的一种压缩算法请求一个压缩的响应,并返回解压缩的文档。如果使用此选项并且服务器发送了一个不受支持的压缩方式,cURL将报错。

–connect-timeout <秒>

您连接到服务器所允许花费的最大时间,单位为秒。只限于连接阶段,一旦crul已经连接,该选项就不起作用了。又见-m/–max-time选项。

假如此选项已被使用过多次,则使用最后一次的设置。

-c/–cookie-jar <文件名>

指 定您想要cURL完成操作后将所有cookie写入哪个文件中。cURL将写入之前从指定文件中读取的、以及从远程服务器获取的所有cookie。如果无 cookie信息,则不会写入文件。该文件将使用Netscape的cookie文件格式。如果您设置文件名为半角单破折号"-",这些cookies信 息会被写入标准输出(stdout)。

注意:如果Cookie jar无法被建立或写入,整个cURL操作不会失败甚至也不会报错。使用-v将得到一个警告显示,但这将是在可能发生致命错误时您唯一可见的反馈。

假如此选项已使用过多次,则将使用最后一次指定的文件名。

-C/–continue-at <偏移地址>

在指定偏移地址继续/恢复之前的文件传输。给定的偏移地址是一个将被忽略的确切字节数,在源文件传输到目的地之前从文件起始处计算。如果在上传中使用, FTP服务器的SIZE命令将不能用于cURL。

使用“ -C – ”来告知cURL在何处及如何自动恢复传输。然后使用给定的输出/输入文件来做到这一点。

假如此选项已被使用过多次,则使用最后一次的设置。

–create-dirs

配合-o选项使用时,cURL将根据需要建立必要的本地目录结构。此选项会建立在-o选项中提到的目录,除此以外没有其它用途。如果-o选项中涉及的文件名没有使用目录或目录已存在,则不会建立目录。

要使用FTP或SFTP创建远程目录时,请使用–ftp-create-dirs选项。

–crlf

(FTP)在上传时将LF转换为CRLF。在MVS中有用( OS/390 ) 。

-d/–data <数据>

( HTTP )将特定数据POST到服务器,与在浏览器中用户填写表单并按提交按钮的效果一样。cURL使用mime type content-type application/x-www-form-urlencoded传输数据到服务器。请与-F/–form 比较。

-d/–data–data-ascii相同 。如果要post二进制数据,您应该使用–data-binary选项。如果要post URL编码的表单项,您应该采用–data-urlencode

在同一个命令行多次使用该参数,数据块将被&符号合并提交。因此,使用’-d name=daniel -d skill=lousy’后提交的数据是’name=daniel&skill=lousy’ 。

如果您的数据以字符@开头,其余的部分应当是一个用来读取数据的文件名,或者您想要cURL从标准输入(stdin)读取数据。该文件的内容必须是经过URL编码的。也可指定多个文件。比如要post文件foobar,那么格式是–data @foobar

–data-binary <数据>

( HTTP )post二进制数据。

如果您的数据以字符@开头,其余的部分应当是个文件名。post的数据使用–data-ascii类似的方式,区别是换行是保留的,未作转换。

如果此选项被多次使用,则第一次定义的数据会附加到-d/–data所描述的数据后 。

–data-urlencode <数据>

( HTTP )与 –data 选项相同,唯一的差别是要采用url编码。(在7.18.0版加入 )

要做CGI兼容,<数据>部分应由name以及其后的分隔符和指定内容组成。该<数据>部分使用下列语法:

 

content

将使cURL使用url-encode编码内容并传递。只是要小心,这样的内容不包含任何=或@符号,所以这将会使语法与下面其他情况相匹配。

=content

将使cURL使用url-encode编码内容并传递。前面的=号不包含在数据中。

name=content

将使cURL使用url-encode编码内容部分并传递。请注意,name的部分已经预先经过URL-encoded编码了。

@filename

将使cURL从给定的文件(包含任何换行符的)中读取数据,URL-encode编码数据并在post时传递给它。

name@filename

将使cURL从给定的文件(包含任何换行符的)中读取数据,URL-encode编码数据并在post时传递给它。name部分获得相同的附加,致使name=urlencoded-file-content。请注意,name已经预先经过URL-encoded编码了。

 

–digest

( HTTP )允许HTTP Digest 认证。这是一个避免密码以明文传送的认证。使用此选项与-u/–user选项组合来设置用户名和密码。又见–ntlm–negotiate–anyauth相关选项。

如果多次使用该选项,下列事件不作任何区别。

–disable-eprt

( FTP )告知cURL在做主动FTP传输时禁用ERPT和LPRT命令。cURL在使用PORT命令前,通常会先尝试使用EPRT ,然后LPRT,但使用此选项后,就会先使用PORT命令了。EPRT和LPRT是原FTP协议的扩展,并可能无法在所有的服务器上工作,但它们以更好的 方式拥有比传统的PORT命令更多的功能。

自cURL7.19.0起,–eprt可以用来再次启用 EPRT,–no-eprt是–disable-eprt的别名 。

禁用EPRT仅改变主动行为。如果你想切换到被动模式(passive mode)请您不要使用-P/–ftp-port或强制与–ftp-pasv一起使用。

–disable-epsv

( FTP )告知cURL在做被动FTP传输时禁用EPSV命令。cURL在使用PASV命令前,通常会先尝试使用EPSV,但使用此选项后,就不会先尝试EPSV命令了。

自cURL7.19.0起,–epsv可以用来再次启用 EPSV,–no-epsv是–disable-epsv的别名 。

禁用EPSV仅改变被动的行为。如果想切换到主动模式下您需要使用-P/–ftp-port

-D/–dump-header <文件>

将协议头写入指定文件。

此选项是方便您保存HTTP网站发送给您的HTTP header时用的。保存协议头的cookie数据就可被第二个cURL通过-b/–cookie选项调用!然而-c/–cookie-jar选项还是更好的储存cookie的方法。

当使用FTP时,FTP服务器的应答行被当作是“协议头”,从而被保存。

假如此选项已被使用过多次,则使用最后一次的设置。

-e/–referer <URL>

( HTTP )向HTTP服务器传送“参考页”的信息。此选项当然也可以与-H/–header标记一起使用。当与-L/–location一起使用时,您可以附加“;auto”到–referer URL,使curl自动设置上一个URL,当它后面跟随Location: header时。";auto"字符串可以单独使用,即使您没有设置初始的–referer。

假如此选项已被使用过多次,则使用最后一次的设置。

–engine <name>

为加密操作选择openssl加密引擎。使用–engine list 打印编译时所支持引擎的清单。请注意,并非所有(或没有)引擎可用在运行时。

–environment

(仅在RISC操作系统)设置了一系列的环境变量,使用-w 选项支持的名称,允许运行cURL后更容易的提取有用的信息。

–egd-file <文件>

(SSL)为Entropy Gathering Daemon 套接字指定路径名。此套接字用于为SSL连接产生随机种子。又见 –random-file的选项。

-E/–cert <证书[:密码]>

( SSL )告知cURL当通过HTTPS或FTPS获取文件时使用指定的证书文件。证书必须是PEM格式。如果没有指定可选密码,将在终端上提示输入。注意,此选项假设的“证书”文件,是私钥和私人证书连结!见–cert–key单独指定他们。

如 果curl使用NSS SSL库编译,那么此选项告知curl用在由环境变量SSL_DIR(或默认的/etc/pki/nssdb)定义的NSS数据库中的证书别名。如果 NSS PEM PKCS#11模块( libnsspem.so)是可用的,那么将加载PEM文件。

假如此选项已被使用过多次,则使用最后一次的设置。

–cert-type <类型>

( SSL )告知curl所提供证书的类型。PEM、DER和ENG是可被识别的类型。如果没有指定,将假定为PEM。

假如此选项已被使用过多次,则使用最后一次的设置。

– cacert <CA certificate>

( SSL )告知curl使用指定的证书文件以验证peer。该文件可能包含多个CA证书。证书必须为PEM格式。通常curl使用内置的默认文件,所以此选项通常用于改变默认的文件。

curl确认已设置的名为’cURL_CA_BUNDLE’的环境变量,并使用给定的路径作为一个路径捆绑的CA证书。此选项会覆写该变量。

Windows版本的curl会自动寻找文件名为’curl-ca-bundle.crt’ 的CA证书,无论是在cURL.exe同一目录下,或在当前工作目录下,或在任何文件夹您的PATH中的任意文件夹下。

如 果curl使用NSS SSL库编译,那么此选项告知curl用在由环境变量SSL_DIR(或默认的/etc/pki/nssdb)定义的NSS数据库中的证书别名。如果 NSS PEM PKCS#11模块( libnsspem.so)是可用的,那么将加载PEM文件。

假如此选项已被使用过多次,则使用最后一次的设置。

–capath <CA 证书目录>

( SSL )告知curl使用指定的证书目录以验证peer。该证书必须是PEM格式的,而且目录必须已使用OpenSSL提供的c_rehash工具提供处理过。如果–cacert指定的文件包含许多CA证书,使用–capath可以让curl使SSL连接效率远远高于使用–cacert。

假如此选项已被使用过多次,则使用最后一次的设置。

-f/–fail

( HTTP )服务器出错时屏蔽错误信息(无任何输出)。这样做以便更好的支持脚本等能更好的处理失败的尝试。在正常情况下当一个HTTP服务器无法提供文档时,它将返回一个解释其原因的HTML文件 。此标志将防止curl输出此文档,并返回错误22 。

这种方法不是万无一失的,有非成功响应代码通过的场合,尤其是参与验证时(响应代码401和407 ) 。

–ftp-account [数据]

( FTP )当FTP服务器在提供用户名和密码后请求“帐户数据”,此数据通过ACCT命令发送。(在7.13.0 版加入)

如果该选项使用过两次,则第二次将覆盖上一次的使用。

–ftp-create-dirs

(FTP / SFTP)当FTP或SFTP的URL/操作使用了一个当前不存在于服务器上的路径时,标准的crul行为会失败。使用此选项,curl将尝试创建丢失的目录。

–ftp-method [方法]

( FTP )控制curl应使用的获取FTP服务器中文件的方法。该方法的变量应是以下的选项:

 

multicwd

curl为每一个给定URL的路径运行一个单一的CWD操作。目录结构复杂的话这将意味着很多条命令。这是RFC1738所描述的。这是预设的,但最慢的行为。

nocwd

curl完全执行CWD操作,而是使用SIZE、RETR、STOR等命令并向服务器发送所有这些命令的完整的路径。这是最快的行为。

singlecwd

curl为完整的目标目录做一次CWD操作,然后“正常地”操作文件(如在multicwd中一样)。这比’ nocwd ‘符合标准,但又比’ multicwd ‘开销要小。

(在7.15.1版加入 )

–ftp-pasv

( FTP )使用被动模式的数据连接。被动模式是内部默认的行为,但使用此选项可以用来覆盖上一个-P/–ftp-port选项。(在7.11.0 版加入)

如果此选项被多次使用,下列事件不作任何区别。取消强制被动模式是不可行的,但您届时必须强制再次以正确的-P/–ftp-port取代。

被动模式意味着curl将先尝试EPSV命令,然后执行PASV命令,除非使用了–disable-epsv选项。

–ftp-alternative-to-user <命令>

( FTP )如果使用USER和PASS命令认证失败,则发送此命令。当使用客户端证书链接到FTPS上的Tumbleweed的安全传输服务器时,使用“SITE AUTH”将告知服务器从证书检索用户名。(在7.15.5版加入 )

–ftp-skip-pasv-ip

( FTP )在curl连接到数据连接时,告知cURL不要使用服务器在响应curl的PASV命令时建议的IP地址。相反curl将重用在控制连接时使用的相同的IP地址。(在7.14.2版加入 )

如果PORT、EPRT或EPSV是用来代替PASV的话,此选项无效。

–ftp-ssl

(FTP)尝试使用SSL/TLS的FTP连接。如果服务器不支持SSL/TLS则恢复到一个非安全连接。为不同级别的加密需求又见–ftp-ssl-control–ftp-ssl-reqd。(在7.11.0 版加入)

–ftp-ssl-control

(FTP)请求SSL/TLS的FTP登录,不加密传输。允许安全认证,但为了传输效率不加密数据传输。如果服务器不支持SSL / TLS的则传输失败。 (在7.16.0版加入 )

–ftp-ssl-reqd

( FTP )请求SSL / TLS的FTP连接。如果服务器不支持SSL / TLS的则终止连接。 (在7.15.5版加入 )

–ftp-ssl-ccc

( FTP )验证后使用CCC(Clear Command Channel)关闭SSL / TLS层。其余的控制通道通信将不加密。此操作允许NAT路由跟随FTP事务。默认为被动模式。选项的其他方式见 –ftp-ssl-ccc-mode 。(在7.16.1 版加入)

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

( FTP )使用CCC(Clear Command Channel)设置CCC模式。被动模式不接受shutdown命令,而是等待服务器这样做,也不会回应服务器的shutdown命令。主动模式接受 shutdown命令并等待服务器回应。(在7.16.2版加入 )

-F/–form <name=content>

( HTTP )curl模拟填写表格并按下提交按钮。这将使curl根据RFC1867使用Content-Type multipart/form-data来POST数据。这将使二进制文件等得以上传。强制’content‘部分为文件,在文件名前加上前缀@号。如只 需从文件中得到content部分的内容,在文件名前使用前缀<。@与<的区别在与,@让一个文件在POST动作中作为文件上传,而< 则仅从文件中获得内容作为文本域。

例如,如果要发送密码文件到服务器,’password’是表单域的名称,这里将填入/etc/passwd文件:

curl -F password=@/etc/passwd www.mypasswords.com

如果要在标准输入(stdin)中获取输入来代替文件,则在应提供文件名的位置上使用-代替。这同样适用于@和<的结构。

您也可以使用’;type=’告知curl是什么Content-Type,类似于:

curl -F "web=@index.html;type=text/html" url.com

或是:

curl -F "name=daniel;type=text/foo" url.com

您也可以设定’filename=’来明确地变更名称域的一个文件上传部分 ,就像这样:

curl -F "file=@localfile;filename=nameinpost" url.com

更多的实例和细节见手册。

此选项可以多次使用。

–form-string <name=string>

( HTTP )类似–form,除了命名参数的值字符串是字面上的意义。以’ @ ‘和’ < ‘开头字符以及值中的’;type=’字符串没有特殊的含义。如果字符串值可能碰巧触发–form的’ @ ‘或’ < ‘特性,则在–form 中优先使用此参数。

-g/–globoff

此选项关闭“URL 通配符分析器” 。当设定此选项,您可以指定包含{}[]字符的的URL,而不被curl本身解释。请注意,这些字符不是普通合法的URL内容,但应根据URI的标准编码。

-G/–get

此选项将所有-d/–data–data-binary的指定数据被用在HTTP GET请求而不是POST请求,否则将使用POST。这些数据与’?’分隔符附加在URL中。

如果结合-I使用,POST数据将取代并与HEAD请求一起附加到URL中。

如果此选项被多次使用,下列事件不作任何区别。这是因为撤消GET是没有道理的,但是您应当选择您较喜欢的方法来取代。

-h/–help

使用帮助。

-H/–header <header>

( HTTP )在获取网页时使用额外的header。您可以指定任何数量的额外的header。请注意,如果您要添加与curl内部使用的header名称相同的自定 义header,您的外部header设置将取代内定的。这样,您就能做比curl一般能做到的更多的事。假如您不完全了解您在做的事,那么就不应当取代 内部设定的header。在冒号右侧给出一个无内容的替换来移除一个内部的header,如: -H “主机: ” 。

cURL将确保您添加/取代的每一个header都与正常的行尾标记一同发送,因此您应把它作为作为header的内容添加进来:不添加换行符或回车,它们只会把您的东西弄得一团糟。

又见-A/–user-agent-e/–referer选项。

此选项可多次使用来添加/替换/移除多个header。

– hostpubmd5 <md5>

传递一个包含32个十六进制数字的字符串。该字符串应是远程主机公钥的128位MD5校验,除非md5sums匹配,否则cURL将拒绝连接。此选项仅用于SCP和SFTP传输。(在7.17.1版中加入 )

–ignore-content-length

( HTTP )忽略Content-Length header。运行Apache1.x的服务器对大于2G字节的文件会报告Content-Length不正确,此选项对此很有用。

-i/–include

( HTTP )在输出中包含的HTTP-header。HTTP-header中包含了像是服务器名称、文档日期、HTTP协议的版本和更多信息…

–interface<名称>

使用指定界面执行操作。您可以输入界面名称, IP地址或主机名。一个例子可能如下所示:

curl –interface eth0:1 http://www.netscape.com/

假如此选项已被使用过多次,则使用最后一次的设置。

-I/–head

(的HTTP / FTP /档案)只获取HTTP-header!HTTP服务器功能命令HEAD,使用此选项只获取文档的header。当使用的FTP或FILE文件,cURL只显示文件大小和最后修改时间。

-j/–junk-session-cookies

( HTTP )当curl被告知给定文件中读取cookie时,此选项会放弃所有“会话cookie ” 。这将基本上与开始一个新会话起到相同的效果。典型的浏览器关闭时总是舍弃会话cookie的。

-k/–insecure

( SSL )此选项明确允许cURL执行“不安全” SSL连接和传输。所有的SSL连接使用捆绑默认安装的CA证书试图使其安全。这使得除非使用-k/–insecure,否则所有连接被认为是“不安全”的而失败。

进一步的细节请看网上资源: http://cURL.haxx.se/docs/sslcerts.html

–keepalive-time <秒>

此选项设定一个连接在发送保持活动探针之前的空闲时间和独立的保持活动探针的间隔。这是当前在操作系统提供的TCP_KEEPIDLE和TCP_KEEPINTVL套接字选项有效的(意味着Linux、AIX、HP-UX等等)。如果使用–no-keepalive选项,则此选项不发生效力。(在7.18.0版加入 )

如果多次使用此选项,则最后一次的设定起作用。

–key <私钥>

(SSL / SSH)私钥文件名。允许您提供在此单独的文件中提供您的私钥。

假如此选项已被使用过多次,则使用最后一次的设置。

–key-type <类型>

( SSL )私钥文件类型。指定–key输入的私钥类型。支持的类型有DER、PEM和ENG。如果没有指定,将假定为PEM。

假如此选项已被使用过多次,则使用最后一次的设置。

–krb <安全等级>

( FTP )启用并使用Kerberos身份验证。必须输入安全等级,应该是’clear’ 、 ‘safe’ 、 ‘confidential’、或’private’ 。如果您指定的安全等级不在以上几种以内,则将使用’private’代替。

此选项需要有在berberos4或GSSAPI(GSS-Nagotiate)支持下编译的库文件。这并不是很常见。使用-V/–version ,看看您的cURL是否支持。

假如此选项已被使用过多次,则使用最后一次的设置。

-K/–config <配置文件>

指 定用来读取cURL参数的配置文件。此配置文件是一个保存了命令行参数的文本文件,使用时就像参数被书写在实际的命令行中一样。选项及其参数必须在同一配 置文件的行中,由空格、冒号、等号或其他连接符号组成(但首选分隔符是等号)。如果该参数中包含空格,则必须使用引号括出。在双引号中可用以下转义符 号:\, ", t, n, r 与 v。在其它任何字母前的反斜杠将被忽略。 如果配置文件行首以’ # ‘字符开始,则此行的剩余部分将被视为注释。在配置文件中,每行请只写入一个选项。

如为-K/–config指定文件名为’ – ‘ 则cURL会从标准输入(stdin)获取文件名 。

请注意,您需要使用–url选项才能在配置文件中指定一个URL,而不是简单的在写上一个URL。因此,它可能与此类似:

url= “ http://cURL.haxx.se/docs/

长选项名可在配置文件中以没有开头的双破折号"–"的形式存在。

当cURL被引用时,它总是(除非使用-q选项)检查是否有默认的配置文件,如有则使用。将在下列位置按顺序查找默认的配置文件:

1 )cURL曲试图找到“HOME目录”:它首先检查cURL_HOME ,然后在HOME环境变量中查找。如果做不到这一点,它会在类UNIX系统中使用getpwuid()(返回当前系统用户的HOME目录) 。在Windows中,它会检查APPDATA变量或检查’%USERPROFILE%Application Data’以作为最后的手段。

2 )在Windows中,如果HOME目录中没有_curlrc文件,它将检查cURL可执行文件所在目录。在类UNIX系统中,它只是尝试从确定的HOME目录里加载.curlrc。

# — 示例文件 — #这是一个注释url = "curl.haxx.se" output = "curlhere.html" user-agent = "superagent/1.0"

# 攫取另一个URL url = "curl.haxx.se/docs/manpage.html" -O referer = "http://nowhereatall.com/" #- — 示例文件结束 —

 

此选项可以多次使用,以加载多个配置文件。

–libcurl <文件>

在任何普通cURL的命令行附加此选项,可将livcurl使用的源代码写入文件,就像您在命令行操作中做的一样!

注意:可能不适当-F选项和发送多重formpost ,所以在这种情况下,输出程序将丢失curl_formadd (3) 所必要的调用,并有可能更多其它的丢失。

假如此选项已被使用过多次,则将使用最后一次给定的文件名。(在7.16.1版加入 )

–limit-rate <速度>

指定cURL使用的最高传输率。如果您的带宽有限且您不想让您的传输占据整个带宽,那么此功能是有用的。

除非给定后缀,否则默认速度单位为字节/秒。加上’ k ‘或’ K ‘后缀则以千字节计算, ‘m’或M ‘则以兆字节计算,而’g’或’ G’则以千兆字节计算。例子: 200K, 3m和1G。

给定的速率是整体传输过程的平均值。这意味着,cURL可能在短时间有爆发传输速度,但随着时间的推移它不会超过给定的速率。

如果您还使用-Y/–speed-limit选项,该选项将优先考虑,并可能使限速略有下降,以帮助保持速度限制逻辑工作。

假如此选项已被使用过多次,则使用最后一次的设置。

-l/–list-only

( FTP )当列出FTP目录,此开关显示只有名称的列表。尤其是当普通目录视图没有使用标准外观或格式,而您需要机器解析FTP目录内容时,此选项非常有用。

此选项发送FTP NLST命令。有些FTP服务器只对NLST命令列出文件列表,不包括子目录和符号连接。

 

–local-port <端口号>[-num]

设置连接使用的首选端口号或本地端口范围 。请注意,端口号是一种稀缺资源,繁忙时,请将端口范围缩小来避免不必要的连接失败。(在7.15.2版加入 )

-L/–location

(HTTP / HTTPS)如果服务器报告所请求的网页已经转移到了其它的位置(位置的指示根据:HTTP-header和3XX响应代码) ,此选项将使cURL重新向新位置发起请求。如果与-i/–include-I/–head一起使用 ,将显示所有请求的的网页HTTP-header。当使用身份验证时,cURL只向初始的主机发送凭据。如果需要cURL重定向到不同的主机,将无法拦截用户名+密码。就如何改变这种情况又见–location-trusted。您可以使用–max-redirs选项限制后续重定向数目。

当cURL跟随重定向且请求不是简单的GET (例如POST或PUT ) ,如果HTTP响应码是301、302或303的话,它将做GET请求。如果响应代码是任何其他3xx代码,cURL将重新使用相同的方法发送请求。

–location-trusted

(HTTP / HTTPS)与-L/–location相同 ,但将允许将用户名+密码发送到该站点可能重定向到的所有主机。这可能会也可能不会引入安全漏洞,如果网站将您重定向到一个您会发送您的身份验证信息(这种情况下是明文的HTTP的Basic认证)到该位置的网站。

 

–max-filesize <字节数>

指定下载文件的最大尺寸(以字节为单位)。如果请求的文件尺寸大于此值,传输将无法启动,cURL返回退出代码63。

注意:在下载期间,文件尺寸并不总是已知的。对于这样的文件,哪怕文件传输大小最终超过给定限制,此选项也不会产生作用。此选项对FTP和HTTP传输都有效。

-m/–max-time <秒>

您允许操作花费的最大时间,以秒计算。这是非常有用的,以防止您的批处理工作由于挂了几个小时,导致网络速度慢或链接丢失。又见–connect-timeout选项。

假如此选项已被使用过多次,则使用最后一次的设置。

-M/–manual

手册。显示帮助手册。

-n/–netrc

使cURL在用户HOME目录中扫描.netrc ( 在Windows下是_netrc )文件,查找登录名和密码。这通常是用于Unix操作系统的FTP。如果是HTTP ,cURL将使用户认证。文件格式详见netrc(4)或  FTP(1)。如果文件权限(不应该同为world-或group-可读)不正确,cURL不会给出任何反馈。环境变量“HOME”通常用来寻找主目录。

一个迅速和非常简单的例子,如何设置一个.netrc文件 ,使cURL使用用户名’myself’和密码’secrct’连接到FTP服务器host.domain.com应类似于:

machine host.domain.com login myself password secret

–netrc-optional

–netrc非常相似,但这一选择使 .netrc变为可选的,而不是–netrc选项强制性的。

–negotiate

( HTTP )启用GSS-Nagotiate验证。GSS-Nagotiate方法是由微软设计,并在他们的Web应用程序中使用。这主要是指支持 Kerberos5身份认证,但还可使用另一个验证方法。欲了解更多信息,请参阅IETF草案, draft-brezak-spnego-http-04.txt。

如果您需要为您的代理身份验证开启Negotiate,请使用–proxy-negotiate选项 。

此选项要求GSSAPI支持编译的库文件。这并不是很常见。使用-V/–version ,看看您的版本是否支持GSS-Negotiate。

当使用此选项时,您还必须提供一个虚假的-u/–user选项来激活身份验证代码。发送’-u :’当做用户名与密码已足够,- u选项实际没有使用。

如果此选项被多次使用,下列事件不作任何区别。

-N/–no-buffer

禁用输出流的缓冲。在正常工作的情况下,cURL将使用标准的缓冲输出流。将产生的效果是将数据以块的形式输出,当数据到达时是不必精确的。使用此选项将禁用该缓冲。

请注意,这是记录在案的否定选项。您可使用–buffer选项来执行该缓冲。

–no-keepalive

禁止TCP连接时使用保持活动信息,默认情况下cURL是允许使用的。

请注意,这是记录在案的否定选项。您可使用–keepalive选项执行保持活动。

–no-sessionid

(SSL)禁用cURL使用SSL会话标识(session_ID)缓存。默认情况下所有传输都是使用该缓存的。请注意,当重用SSL会话缓存时,虽然不会破坏任何传输,但是有可能会破坏SSL实现。可能需要禁用此选项您才可能完成该操作。(在7.16.0版加入)

请注意,这是记录在案的否定选项。您可以因此使用–sessionid执行会话标识缓存。

– noproxy <不需代理的主机列表>

无 需使用代理的主机列表,如有指定,则使用逗号分隔。单一通配符是*号字符,将匹配所有主机,并禁用代理。此列表中的每个名字应符合一个包含主机名的域名, 或主机本身。例如,local.com将匹配local.com、local.com:80和www.local.com,但不匹配 www.notlocal.com。(在7.19.4版加入) 。

–ntlm

(HTTP) 启用NTLM验证。NTLM是由微软设计并在其IISIIS Web服务器中使用的身份验证方法。这是一个私有的协议,由一帮聪明家伙做了逆向工程。cURL上的实现基于他们的努力。这种行为实际是不值得支持的,您 应当鼓励使用NTLM的人切换到其它大众化并有记录的身份验证方法,比如Digest来代替NTLM。

如果您想启用NTLM做为您的代理身份验证,则使用 –proxy-ntlm选项。

此选项要求编译时使用SSL库支持。使用-V/–version,看看您的cURL是否支持NTLM身份验证。

如果此选项被多次使用,下列事件不作任何区别。

-o/–output <文件>

将获取的远程文件输出到文件中,而不是输出到屏幕上(stdout)。如果您使用{}或[]定义了批量获取文件,则您可以在<文件>选项中用#后跟随数字的格式来定义文件名。这样实际文件名中的#将被多个URL中的当前字符串代替。如:

curl http://{one,two}.site.com -o "file_#1.txt"     则输出file_one和file_two文件

或使用多个变量如:

curl http://{site,host}.host[1-5].com -o "#1_#2"   #1将被"site"或"host"代替,#2将被1-5之间的数字代替

您处理多少条URL就可以使用多少次该选项。

又见–create-dirs来动态建立本地目录。指定输出到’-‘(单破折号)将强制输出到屏幕上(stdout)。

-O/–remote-name

直接以远程文件名保存本地文件。(只使用在URL中指定了文件名部分,不包括路径。)

用于保存的远程文件由给定URL提取。

您处理多少条URL就可以使用多少次该选项。

–remote-name-all

此选项改变默认动作到所有给定的待处理URL,就像为每条URL指定-O/–remote-name参数一样。因此,如果您要在使用了–remote-name-all后再为某个特定URL禁用它时,您必须使用"-o -"或–no-remote-name选项 。(在7.19.0 版加入)

–pass <密码>

(SSL / SSH)私钥的密码。

假如此选项已被使用过多次,则使用最后一次的设置。

–post301

当 跟随301重定向时,告知cURL遵循RFC 2616/10.3.2并不要将POST请求转换成GET请求。不符合RFC的行为是普遍存在于Web浏览器中的,因此cURL默认做上述转换来保持一 致。然而,一台服务器有可能做一个POST请求来保持在这样一个重定向后的POST。此选项只有在使用-L/–location时有意义 (在7.17.1版加入 )

–post302

当 跟随302重定向时,告知cURL遵循RFC 2616/10.3.2并不要将POST请求转换成GET请求。不符合RFC的行为是普遍存在于Web浏览器中的,因此cURL默认做上述转换来保持一 致。然而,一台服务器有可能做一个POST请求来保持在这样一个重定向后的POST。此选项只有在使用-L/–location时有意义 (在7.19.1版加入 )

–proxy-anyauth

告知cURL在连接给定代理服务器时挑选一个合适的身份验证方法。可能会导致额外的请求/应答往返。(在7.13.2 版加入)

–proxy-basic

告知cURL在连接给定代理服务器时选择基本HTTP身份验证。使用–basic选项为远程主机开启基本HTTP验证。基本身份验证是cURL使用代理服务器时的默认身份验证方法。

–proxy-digest

告知cURL在连接给定代理服务器时选择Http Digest身份验证。使用–digest选项为远程主机开启HTTP Digest验证。

–proxy-negotiate

告知cURL在连接给定代理服务器时选择HTTP Negotiate身份验证。使用–negotiate 选项为远程主机开启HTTP Negotiate验证。(在7.17.1版中加入 )

–proxy-ntlm

告知cURL在连接给定代理服务器时选择HTTP NTLM身份验证。使用–ntlm选项为远程主机使用NTLM验证。

–proxy1.0 <代理主机[:端口]>

使用指定的HTTP 1.0代理。如未指定端口号,则假定使用1080端口。

和HTTP代理选项(-x/–proxy)的唯一区别,是此选项尝试指定HTTP 1.0协议而不是默认的HTTP 1.1协议的CONNECT通过代理服务器。

-p/–proxytunnel

当使用HTTP代理( -x/–proxy )时,此选项将试图使非HTTP协议通过代理隧道,而非使用类似HTTP的操作行为。代理隧道的方法是通过HTTP代理的CONNECT发起请求,请求代理允许直接连接到cURL需要通过的隧道的远程端口号来实现的。

–pubkey<公钥>

(SSH)公钥的文件名。允许您在单独的文件中提供您的公钥。

假如此选项已被使用过多次,则使用最后一次的设置。

-P/–ftp-port <地址>

(FTP)当连接到FTP服务器时,此选项让cURL使用主动模式。在实践中,cURL使服务器连接到客户端的指定地址和端口,而被动模式要求服务器为其设置一个IP地址和端口来连接。 <地址>应该是以下之一:

 

界面

即"eth0"  指定您要使用的网络界面ip地址(只在Unix下有效)

IP地址

即“ 192.168.10.1 ”指定确切的IP地址

主机名称

即“ my.host.domain ”指定主机名称

使cURL选择已被当前控制连接使用的相同IP地址。

 

假如此选项已被使用过多次,则使用最后一次的设置。–ftp-pasv选项禁用PORT命令。使用参数–disable-eprt尝试用EPRT命令代替PORT命令。EPRT其实就是PORT的升级版。

从7.19.5版开始 ,你可以在地址的右侧附加 ":[开始]-[结束]",指定cURL使用的TCP端口范围。从低到高指定端口的范围。单一端口号也能工作,但是请注意如果端口无法使用,会增加失败的风险。

-q

如果作为命令行上第一个参数,则不会读取和使用crulrc配置文件。配置文件的默认搜索路径详情见-K/–config,。

-Q/–quote <命令>

(FTP / SFTP)发送任意指令到远程FTP或SFTP服务器。quote命令在传输发生之前发送(就在FTP传输中最初的PWD命令后,必须准确) 。要使命令在成功传输后发送,则为它们加前缀破折号’- ‘。要使命令在libcurl改变工作目录后而又在传输命令前发送,则为它们加前缀’+'(只支持FTP协议) 。您可以指定任意数量的命令。如果服务器返回一个失败的命令,整个操作将中止。您必须以RFC959定义的正确语法向FTP服务器发送FTP命令,或者向 SFTP服务器发送下列命令。此选项可以多次使用。

SFTP一个二进制协议。不同于FTP,libcurl解释SFTP的quote命令后再将它们发送到服务器。以下列出所有支持的SFTP quote命令:

 

chgrp group file

该chgrp命令将以group操作符指定的组ID设置给以file操作符指定的文件名。group操作符应为一个十进制整数的组ID。

chmod mode file

该chmod命令修改文件属性。mod操作符应为一个八进制整数的属性数字。

chown user file

该chown命令设置以file操作符定义的文件所有者为以user操作符指定的用户ID。user操作符应为一个十进制整数的用户ID。

ln source_file target_file

ln和symlink命令创建一个符号链接,从target_file位置指向source_file位置。

mkdir directory_name

mkdir命令创建名为directory_name的目录。

pwd

pwd命令返回当前工作目录的绝对路径。

rename source target

rename命令将源(source)目录或文件的名称重命名为目标(target)目录或文件的名称。

rm file

使用rm命令删除file操作符指定的文件。

rmdir directory

rmdir命令移除directory操作符指定的非空目录。

symlink source_file target_file

见ln。

 

–random-file <文件>

(SSL)指定包含将被视为随机数据的文件路径。这些数据将作为SSL连接的随机数引擎的种子。又见–egd-file选项。

-r/–range <范围>

(HTTP/FTP/SFTP/FILE)该选项指定从HTTP/1.1、FTP或SFTP服务器又或本地文件下载字节的范围,常应用于分块下载文件。指定范围可有多种表示。

 

0-499指定前500字节

500-999指定第二500字节

-500指定最后500字节

9500 –指定从9500字节开始的全部字节。

0-0,-1只指定第一个和最后一个字节(*) (H)

500-700,600-799从偏移500字节开始的300字节(H)

100-199,500-599指定两个不同的100字节的范围(*)(H)

 

(*) =请注意,这将导致服务器回复多重响应!

在‘开始-停止’这样的语法中只能使用数字(0-9)。如果指定了非数字的字符,则取决于服务器设置,会有不可预料的回应。

您还应该了解,许多HTTP/1.1服务器没有启用此项功能,因此,当您试图获得该范围的文件内容时,会得到整个文件。

FTP和SFTP分块下载只支持简单的‘开始-停止’语法(其中一个数字是可以省略的)。FTP的使用取决于扩展FTP命令SIZE。

假如此选项已被使用过多次,则使用最后一次的设置。

–raw

使用此选项禁用所有内部内容的HTTP解码或传输编码,并转而让其以原格式传递。(在7.16.2版加入 )

-R/–remote-time

使用此选项,libcurl将试图寻找远程文件的时间戳,使本地文件获得与其相同的时间戳。

–retry <次数>

设置cURL在传输时遇到暂态错误后重试的次数,超过此次数则放弃传输。将次数设置为0则使cURL不做重试(这是默认值)。暂态误差是指:传输超时、FTP 5xx响应码或HTTP 5xx响应码。

当cURL重试传输时,先等待一秒。然后对于所有即将发起的重试请求,此等待时间将加倍直到到达10分钟。此10分钟的等待将会是剩余重试请求之间的延迟。使用–retry-delay选项禁用此退避时间(Backoff Time)指数算法。要限制允许重试的总时间,又见–retry-max-time。(在7.12.3版加入 )

如果多次使用此选项,则最后一次的设定的起作用。

–retry-delay <秒>

此选项设置传输过程遇到暂态错误时,cURL在每次重试前等待的时间(它改变了重试请求之间默认的退避时间(Backoff Time)算法)。只有当使用–retry选项时,此选项才起作用。将此设置为0则cURL使用默认的退避时间(Backoff Time)。(在7.12.3版加入 )

如果多次使用此选项,则最后一次的设定起作用。

–retry-max-time <秒>

在发起第一次传输前,重试计时器将重置。重试将像往常一样进行(见–retry ) ,只要计时器还没有到达此给定限制。请注意,如果计时器还没有达到限制时间,该请求将被执行。在执行期间,它需要的时间可能比给定的更长。要限制单次请求的最大时间,请使用-m/–max-time参数 。将此选项设置为0则不作超时重试。(在7.12.3版加入 )

如果多次使用此选项,则最后一次的设定起作用。

-s/–silent

安静模式。不显示进度表或错误信息。使cURL不反馈信息。

-S/–show-error

当与-s选项一起使用时,cURL在其出错时显示一条出错信息。

–socks4 <主机[:端口]>

使用指定的SOCKS4代理。如未指定端口号,则假定是1080端口。(在7.15.2版加入 )

此选项会覆盖任何先前使用的-x/–proxy选项 ,因为它们是相互排斥的。

假如此选项已被使用过多次,则使用最后一次的设置。

–socks4a <主机[:端口]>

使用指定的SOCKS4a代理。如未指定端口号,则假定是1080端口。(在7.18.0 版加入)

此选项会覆盖任何先前使用的-x/–proxy选项 ,因为它们是相互排斥的。

假如此选项已被使用过多次,则使用最后一次的设置。

–socks5-hostname <主机[:端口]>

使用指定的SOCKS5代理(并让代理解析主机名称) 。如未指定端口号,则假定是1080端口。(在7.18.0 版加入)

此选项会覆盖任何先前使用的-x/–proxy选项 ,因为它们是相互排斥的。

假如此选项已被使用过多次,则使用最后一次的设置。(此选项曾错误地记录和用作–socks没有附加的数量。 )

–socks5 <主机[:端口]>

使用指定的SOCKS5代理——但在本地解析主机名。如未指定端口号,则假定是1080端口。

此选项会覆盖任何先前使用的-x/–proxy选项 ,因为它们是相互排斥的。

假如此选项已被使用过多次,则使用最后一次的设置。(此选项曾错误地记录和用作–socks没有附加的数量。 )

–socks5-gssapi-service <服务名>

socks服务器的默认服务名是rcmd/server-fqdn。此选项允许您改变它。

范 例: –socks5 proxy-name –socks5-gssapi-service sockd would use sockd/proxy-name –socks5 proxy-name –socks5-gssapi-service sockd/real-name would use sockd/real-name for cases where the proxy-name does not match the princpal name。(在7.19.4版加入 ) 。

–socks5-gssapi-nec

作为gssapi negotiation的一部分,协商保护模式。RFC1961的第4.3/4.4小节中提到此协议应是受保护的(protected),但NEC参照实现中则不这么做。–socks5-gssapi-nec选项允许协商保护模式的未受保护的交换。(在7.19.4 版加入)

–stderr <文件>

将输出到标准错误(stderr)的信息写入指定文件。如果文件名指定为纯文本的’-‘,则写入到标准输出(stdout)。此选项在您使用decent redirecting capabilities的shell时是无用的。

假如此选项已被使用过多次,则使用最后一次的设置。

–tcp-nodelay

打开TCP_NODELAY选项。详细了解此选项,见curl_easy_setopt(3)手册页。(在7.11.2 版加入)

-t/–telnet-option <OPT=val>

为telnet协议传递选项。支持的选项有:

TTYPE=<term>设置终端类型。

XDISPLOC=<X display>设置X显示位置。

NEW_ENV=<var,val>设置一个环境变量。

-T/–upload-file <文件>

传 输指定的本地文件到远程的URL。如果URL中不指定文件部分,则cURL将使用本地文件名。请注意,您必须在最后一个目录后附加一个/,以说明确实没有 提供文件名,否则cURL会把最后一级目录名当做文件名称。这是传输操作失败最可能的原因。如果是在HTTP(S)中,则将使用PUT命令。

如果<文件>为"-"(单破折号),则使用标准输入(stdin)来代替给定的文件。

您可在命令行上为每个URL指定一个-T选项。每一个-T + URL 指定上传什么,上传到哪里。cURL还支持- T参数的“通配符”,也就是说,您能用过在使用URL格式中支持的通配符类型来上传多个文件到一个URL,例如:

curl -T "{file1,file2}" http://www.uploadtothissite.com

甚至

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

–trace <文件>

将所有传入和传出的数据,包括描述性信息的完整跟踪转储到给定的输出文件中。使用"-"作为文件名则将输出发送到标准输出(stdout)。

此选项会覆盖上一个-v/–verbose –trace-ascii 选项的设置。

假如此选项已被使用过多次,则使用最后一次的设置。

–trace-ascii <文件>

将所有传入和传出的数据,包括描述性信息的完整跟踪转储到给定的输出文件中。使用"-"作为文件名则将输出发送到标准输出(stdout)。

–trace非常相似,但没有输出十六进制部分,而只在转储中显示了ASCII部分。这种体积更小的转储文件使未经训练的人士更易阅读。

此选项会覆盖上一个-v/–verbose –trace 选项的设置。

假如此选项已被使用过多次,则使用最后一次的设置。

–trace-time

在cURL显示的每一条trace或verbose行的开始处添加一个时间标记。(在7.14.0版加入 )

-u/–user <用户名:密码>

为服务器身份验证指定用户名和密码。覆盖-n/–netrc–netrc-optional选项 。

如果你只给定用户名(不输冒号),cURL会提示输入密码。

如果您使用了一个开启SSPI的cURL执行文件并做NTLM身份验证,您可强制cURL从您当前环境下获取用户名与密码,方法是在此选项后加一个冒号: "-u :" 。

假如此选项已被使用过多次,则使用最后一次的设置。

-U/–proxy-user <用户名:密码>

为代理服务器身份验证指定用户名和密码。

如果您使用了一个开启SSPI的cURL执行文件并做NTLM身份验证,您可强制cURL从您当前环境下获取用户名与密码,方法是在此选项后加一个冒号: "-u :" 。

假如此选项已被使用过多次,则使用最后一次的设置。

–url <URL>

指定要获取的URL地址。此选项主要是方便您在配置文件中指定URL时使用。

此选项可使用任意多次。使用-o/–output-O/–remote-name选项来控制此URL写往何处。

-v/–verbose

时 获取过程显示更多的信息。对调试工作很有用。以’>’开头的行是指cURL发出的“头数据(header data)”,以 ‘<‘开头的行是指cURL收到的“头数据(header data)”。这些在一般情况下是不可见的。以 ‘*’ 开头的行是指cURL提供的额外信息。

请注意,如果您只想输出HTTP header,那么-i/–include可能是您需要的选项。

如果你觉得此办法还不能给您足够的细节,可以考虑使用–trace–trace-ascii来代替。

此选项会覆盖之前使用的–trace-ascii–trace-ascii–trace选项。

-V/–version

显示关于cURL的信息以及它使用的libcurl版本。

第一行包含cURL的完整版本号、可执行文件链接的libcurl和其他第三方库。

第二行(以"Protocols:"开始)显示所有libcurl报告支持的协议。

第三行(以"Features:"开始 )显示libcurl报告提供的具体特性。提供的功能包括:

 

IPv6

您可使用IPv6。

krb4

支持FTP的Krb4。

SSL

支持HTTPS和FTPS。

libz

支持通过HTTP自动解压被压缩的文件。

NTLM

支持NTLM身份验证。

GSS-Negotiate

支持FTP的Negotiate身份验证和krb5。

Debug

cURL使用除错选项的libcurl编译。允许更多的错误跟踪和内存调试信息,cURL开发专用!

AsynchDNS

使cURL使用异步名称解析。

SPNEGO

支持SPNEGO协商身份验证。

Largefile

cURL支持大于2GB的文件传输 。

IDN

cURL支持IDN国际域名。

SSPI

支持SSPI。如果您使用NTLM并设置了一个空用户名,cURL将使用您当前的用户名和密码做身份验证。

 

-w/–write-out <格式>

定 义当成功传输完成后显示在标准输出(stdout)的信息。该信息的格式可能是混合了纯文本与任意数目变量的字符串。该字符串可被指定 为"string",其中"@filename"表示输出filename文件中的数据,"@-"表示输出用户写入标准输入(stdin)的数据。

在输出格式中呈现的变量会被cURL用其认为合适的值或文本取代,分述如下。所有变量都以%{变量名}这样的格式定义,用%%来输出正常的%。用n表示换行、r表示回车、t表示一个制表符宽度(tab)

注意: %符号在Win32的环境下是一个特殊的符号,使用此选项时,所有出现%的地方必须以%%代替。

常用变量名有:

 

url_effective最后获取的URL。此信息当您告知cURL来跟随location: headers时是最有用的。

http_code上一次HTTP(S)或FTP(S)操作返回的响应码。在7.18.2版加入的response_code显示同样的信息。

http_connect在最后一次对cURL的CONNECT请求的响应(从代理)中发现的数值代码。 (在7.12.4版加入)

time_total全部操作耗费的时间,单位为秒。精确到毫秒。

time_namelookup从开始到域名解析完成耗费的时间,单位为秒。

time_connectTCP连接远程主机(或代理服务器)所耗时间,单位为秒。

time_appconnectSSL/SSH/等与远程主机连接/握手完成花费的时间,单位为秒。(在7.19.0 版加入)

time_pretransfer从开始到文件将要传输前花费的时间,单位为秒。包括指定的协议所有预传输命令和negotiations。

time_redirect所有重定向步骤的时间,包域名解析、连接、预传输和最后事务开始前的传输,单位为秒。time_redirect显示多重重定向的完整执行时间。(在7.12.3版加入 )

time_starttransfer从开始到第一个字节将被传输前耗费的时间,单位为秒。这包括time_pretransfer和服务器需要的运算结果的时间。

size_download下载的总字节数。

size_upload上传的总字节数。

size_header下载的header的总字节数。

size_request发送的HTTP请求的总字节数。

speed_downloadcurl成功下载的平均下载速度。

speed_uploadcurl成功上传的平均上传速度。

content_type如果有,显示请求文档的Content-Type

num_connects最近一次传输中的连接数目。(在7.12.3版加入 )

num_redirects跟随请求的重定向数目。 (在7.12.3版加入 )

redirect_url当未使用-L选项发起跟随重定向的HTTP请求时,此变量显示重定向到的实际URL。(在7.18.2版加入 )

ftp_entry_path初始路径libcURL结束时,在登录到远程FTP服务器。(在7.15.4版加入 )

ssl_verify_result请求的SSL peer证书校验结果。0表示校验成功。(在7.19.0 版加入)

 

假如此选项已被使用过多次,则使用最后一次的设置。

-x/–proxy <代理主机[:端口]>

使用指定的HTTP代理。如未指定端口号,则假定是1080端口。

此选项会覆盖目前环境变量中的代理设置。如果有环境变量设置了代理,可以设置代理为""来覆盖此环境变量中的代理设置。

请注意,所有通过HTTP代理的操作都会透明的转化为HTTP协议。这意味着某些特定协议的操作将会无效。这是没问题的,如果使用-p/–proxytunnel选项设定通过隧道代理。

从7.14.1版开始,代理主机可被指定与代理环境变量,包括协议前缀(http://)和嵌入的用户名与密码完全一样的方式。

假如此选项已被使用过多次,则使用最后一次的设置。

-X/–request <命令>

(HTTP)在与HTTP服务器连接时使用一个自定义的请求方法。指定的请求将被用来代替使用的其他方法(默认是GET方法)。详细资料和解释请阅读HTTP 1.1规范。

(FTP)在从FTP服务器获取文件列表时,使用一个自定义的FTP命令代替LIST命令。

假如此选项已被使用过多次,则使用最后一次的设置。

-y/–speed-time <时间>

如果在<时间>设定的范围内,下载速度慢于指定的字节每秒的速度则中止下载。如果使用此选项,除非同时用-Y选项设置,否则默认的传输速度为1(字节/秒)。

此选项控制传输,使其不会影响缓慢的连接等。如果您关心的是这个,请尝试–connect-timeout选项。

假如此选项已被使用过多次,则使用最后一次的设置。

-Y/–speed-limit <速度>

如果下载速度在speed-time设置的秒数里慢于此选项指定的速度(字节/秒),则下载中止。speed-time使用-y选项设置,默认为30(秒)。

假如此选项已被使用过多次,则使用最后一次的设置。

-z/–time-cond <日期表达式>

(HTTP/FTP)请求最后修改时间迟于或早于给定日期的文件。日期表达式可以是所有类型的日期字符串。如果指定的日期表达式与已知的任意表达式都不相符,则会尝试从给定的文件名中来获取。日期表达式详情见curl_getdate(3)手册页。

使用破折号(-)开始的日期表达式则请求此日期之前的文档,默认是获取比指定日期/时间更新的文档。

假如此选项已被使用过多次,则使用最后一次的设置。

–max-redirs <数量>

设定允许的重定向的最大数量。如果使用-L/–location选项,则此选项可以用来使cURL避免“超越边界的”重定向。默认情况下,限制设置为50个重定向。将此选项设置为-1则是无限。

假如此选项已被使用过多次,则使用最后一次的设置。

-0/–http1.0

( HTTP )强制cURL使用HTTP 1.0而不是其默认的HTTP 1.1来发出请求 。

-1/–tlsv1

( SSL )强制cURL使用TLS第1版协议与远程的TLS服务器进行协商。

-2/–sslv2

( SSL )强制cURL使用SSL第2版协议与远程的SSL服务器进行协商。

-3/–sslv3

( SSL )强制cURL使用SSL第3版协议与远程的SSL服务器进行协商。

-4/–ipv4

如果libcurl是能够解析多IP地址的版本(如果它是IPv6兼容的),此选项告知libcurl只解析指向IPv4的地址。

-6/–ipv6

如果libcurl是能够解析多IP地址的版本(如果它是IPv6兼容的),此选项告知libcurl只解析指向IPv6的地址。

-#/–progress-bar

使cURL用一个进度条代替默认的统计数据来显示进度信息。

文件

~/.curlrc

默认的配置文件,详情见-K/–config

环境

环境变量可以使用小写或大写。小写版本的优先。 http_proxy是一个例外,因为它仅适用于小写。

http_proxy [协议://]<主机>[:端口]

为HTTP设置代理服务器 。

HTTPS_PROXY [协议://]<主机>[:端口]

为HTTPS设置代理服务器 。

FTP_PROXY [协议://]<主机>[:端口]

为FTP设置代理服务器 。

ALL_PROXY [协议://]<主机>[:端口]

为无指定协议的代理设定代理服务器。

NO_PROXY <逗号分隔的主机列表>

不使用任何代理的主机列表。如果只设置为星号’ * ‘,它匹配所有主机。

退出码

这里有许多可能会出现在恶劣条件下的不同错误代码和相应信息。在本文写作之时,退出代码有:

1

未支持的协议。此版cURL不支持这一协议。

2

初始化失败。

3

URL格式错误。语法不正确。

5

无法解析代理。无法解析给定代理主机。

6

无法解析主机。无法解析给定的远程主机。

7

无法连接到主机。

8

FTP非正常的服务器应答。cURL无法解析服务器发送的数据。

9

FTP访问被拒绝。服务器拒绝登入或无法获取您想要的特定资源或目录。最有可能的是您试图进入一个在此服务器上不存在的目录。

11

FTP 非正常的PASS回复。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错误。quote命令从服务器返回错误。

22

HTTP 找不到网页。找不到所请求的URL或返回另一个HTTP 400或以上错误。此返回代码只出现在使用了-f/–fail选项以后。

23

写入错误。cURL无法向本地文件系统或类似目的写入数据。

25

FTP 无法STOR文件。服务器拒绝了用于FTP上传的STOR操作。

26

读错误。各类读取问题。

27

内存不足。内存分配请求失败。

28

操作超时。到达指定的超时期限条件。

30

FTP PORT失败。PORT命令失败。并非所有的FTP服务器支持PORT命令,请尝试使用被动(PASV)传输代替!

31

FTP无法使用REST命令。REST命令失败。此命令用来恢复的FTP传输。

33

HTTP range错误。range "命令"不起作用。

34

HTTP POST错误。内部POST请求产生错误。

35

SSL连接错误。SSL握手失败。

36

FTP 续传损坏。不能继续早些时候被中止的下载。

37

文件无法读取。无法打开文件。权限问题?

38

LDAP 无法绑定。LDAP绑定(bind)操作失败。

39

LDAP 搜索失败。

41

功能无法找到。无法找到必要的LDAP功能。

42

由回调终止。应用程序告知cURL终止运作。

43

内部错误。由一个不正确参数调用了功能。

45

接口错误。指定的外发接口无法使用。

47

过多的重定向。cURL达到了跟随重定向设定的最大限额跟

48

指定了未知TELNET选项。

49

不合式的telnet选项。

51

peer的SSL证书或SSH的MD5指纹没有确定。

52

服务器无任何应答,该情况在此处被认为是一个错误。

53

找不到SSL加密引擎。

54

无法将SSL加密引擎设置为默认。

55

发送网络数据失败。

56

在接收网络数据时失败。

58

本地证书有问题。

59

无法使用指定的SSL密码。

60

peer证书无法被已知的CA证书验证。

61

无法辨识的传输编码。

62

无效的LDAP URL。

63

超过最大文件尺寸。

64

要求的FTP的SSL水平失败。

65

发送此数据需要的回卷(rewind)失败。

66

初始化SSL引擎失败。

67

用户名、密码或类似的信息未被接受,cURL登录失败。

68

在TFTP服务器上找不到文件。

69

TFTP服务器权限有问题。

70

TFTP服务器磁盘空间不足。

71

非法的TFTP操作。

72

未知TFTP传输编号(ID)。

73

文件已存在(TFTP) 。

74

无此用户(TFTP) 。

75

字符转换失败。

76

需要字符转换功能。

77

读SSL证书出现问题(路径?访问权限? ) 。

78

URL中引用的资源不存在。

79

SSH会话期间发生一个未知错误。

80

未能关闭SSL连接。

82

无法加载CRL文件,丢失或格式不正确(在7.19.0版中增加 ) 。

83

签发检查失败(在7.19.0版中增加 ) 。

XX

更多信息错误代码会在未来版本中出现在这里。现有的条目将永不改变。

作者/贡献者

主要作者为丹尼尔斯腾伯格,但完整的贡献者名单在单独的THANKS文件中。

万维网

http://cURL.haxx.se

FTP

ftp://ftp.sunet.se/pub/www/utilities/cURL/

也可参见

FTP (1) wget (1)

原文链接:https://phpor.net/blog/post/730
 Posted by at 上午 7:51