zoukankan      html  css  js  c++  java
  • CURL 使用指南

    CURL - 使用指南  

    简介

    cURL是一个向服务器或从服务器传输数据的命令行工具,基于libcurl。是跨平台的,几乎可以在所有现存操作系统上使用,功能异常强大。而其libcurl库也支持几乎所有编程语言。

    名称

    cURL - transfer a 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之间的调用。-#选项会很有帮助。-H/--header来设置。

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

    --basic、 --digest 、--ntlm、与--nagotiate使用。

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

    -L/--location选项结合使用。被读取cookie的文件格式应为纯文本的HTTP headers或Netscape/Mozilla的cookie文件格式。

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

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

    --ntlm 、 --digest 、或--negotiate) 。

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

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

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

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

    -m/--max-time选项。

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

    --ftp-create-dirs选项。

    -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 。

    -d/--data所描述的数据后 。

    -u/--user选项组合来设置用户名和密码。又见--ntlm 、--negotiate--anyauth相关选项。

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

    -P/--ftp-port或强制与--ftp-pasv一起使用。

    -P/--ftp-port 。

    -b/--cookie选项调用!然而-c/--cookie-jar选项还是更好的储存cookie的方法。

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

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

    -H/--header标记一起使用。当与-L/--location一起使用时,您可以附加“;auto”到--referer URL,使curl自动设置上一个URL,当它后面跟随Location: header时。";auto"字符串可以单独使用,即使您没有设置初始的--referer。

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

    --engine list 打印编译时所支持引擎的清单。请注意,并非所有(或没有)引擎可用在运行时。

    --random-file的选项。

    --key单独指定他们。

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

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

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

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

    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文件。

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

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

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

    curl输出此文档,并返回错误22 。

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

    curl将尝试创建丢失的目录。

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

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

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

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

    (在7.15.1版加入 )

    -P/--ftp-port取代。

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

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

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

    --ftp-ssl-control--ftp-ssl-reqd。(在7.11.0 版加入)

    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

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

    此选项可以多次使用。

    curl本身解释。请注意,这些字符不是普通合法的URL内容,但应根据URI的标准编码。

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

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

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

    curl内部使用的header名称相同的自定 义header,您的外部header设置将取代内定的。这样,您就能做比curl一般能做到的更多的事。假如您不完全了解您在做的事,那么就不应当取代 内部设定的header。在冒号右侧给出一个无内容的替换来移除一个内部的header,如: -H “主机: ” 。

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

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

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

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

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

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

    -k/--insecure,否则所有连接被认为是“不安全”的而失败。

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

    --no-keepalive选项,则此选项不发生效力。(在7.18.0版加入 )

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

    --key输入的私钥类型。支持的类型有DER、PEM和ENG。如果没有指定,将假定为PEM。

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

    -V/--version ,看看您的cURL是否支持。

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

    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/" #- -- 示例文件结束 ---

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

    curl <文件>

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

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

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

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

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

    -i/--include-I/--head一起使用 ,将显示所有请求的的网页HTTP-header。当使用身份验证时,cURL只向初始的主机发送凭据。如果需要cURL重定向到不同的主机,将无法拦截用户名+密码。就如何改变这种情况又见--location-trusted。您可以使用--max-redirs选项限制后续重定向数目。

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

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

    --connect-timeout选项。

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

    --proxy-negotiate选项 。

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

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

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

    --proxy-ntlm选项。

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

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

    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参数一样。因此,如果您要在使用了--remote-name-all后再为某个特定URL禁用它时,您必须使用"-o -"或--no-remote-name选项 。(在7.19.0 版加入)

    -L/--location时有意义 (在7.17.1版加入 )

    -L/--location时有意义 (在7.19.1版加入 )

    --basic选项为远程主机开启基本HTTP验证。基本身份验证是cURL使用代理服务器时的默认身份验证方法。

    --digest选项为远程主机开启HTTP Digest验证。

    --negotiate 选项为远程主机开启HTTP Negotiate验证。(在7.17.1版中加入 )

    --ntlm选项为远程主机使用NTLM验证。

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

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

    --ftp-pasv选项禁用PORT命令。使用参数--disable-eprt尝试用EPRT命令代替PORT命令。EPRT其实就是PORT的升级版。

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

    -K/--config,。

    curl改变工作目录后而又在传输命令前发送,则为它们加前缀'+'(只支持FTP协议) 。您可以指定任意数量的命令。如果服务器返回一个失败的命令,整个操作将中止。您必须以RFC959定义的正确语法向FTP服务器发送FTP命令,或者向 SFTP服务器发送下列命令。此选项可以多次使用。

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

    --egd-file选项。

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

    --retry-delay选项禁用此退避时间(Backoff Time)指数算法。要限制允许重试的总时间,又见--retry-max-time。(在7.12.3版加入 )

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

    --retry选项时,此选项才起作用。将此设置为0则cURL使用默认的退避时间(Backoff Time)。(在7.12.3版加入 )

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

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

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

    -x/--proxy选项 ,因为它们是相互排斥的。

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

    --socks5-gssapi-nec选项允许协商保护模式的未受保护的交换。(在7.19.4 版加入)

    curl_easy_setopt(3)手册页。(在7.11.2 版加入)

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

    甚至

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

    -v/--verbose --trace-ascii 选项的设置。

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

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

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

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

    -n/--netrc--netrc-optional选项 。

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

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

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

    -o/--output-O/--remote-name选项来控制此URL写往何处。

    -i/--include可能是您需要的选项。

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

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

    curl版本。

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

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

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

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

    -p/--proxytunnel选项设定通过隧道代理。

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

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

    --connect-timeout选项。

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

    curl_getdate(3)手册页。

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

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

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

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

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

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

    curlrc

    默认的配置文件,详情见-K/--config-f/--fail选项以后。

    http://cURL.haxx.seftp://ftp.sunet.se/pub/www/utilities/cURL/

    也可参见

    转自:http://blog.163.com/lgh_2002/blog/static/440175262009913105810553/

  • 相关阅读:
    电影观后感
    自定义内存管理
    web.xml配置详解
    Annotation
    Centos中yum方式安装java
    linux下添加用户并赋予root权限
    Injector
    Container
    GlassFish的安装与使用(Windows)
    Version Control
  • 原文地址:https://www.cnblogs.com/ppazhang/p/2697998.html
Copyright © 2011-2022 走看看