手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

curl 使用实例详解

[日期:2017-12-21] 来源:Linux社区  作者:cmzsteven [字体: ]

二十五、DICT

先尝试几个有趣的命令:

curl dict://dict.org/m:curl
curl dict://dict.org/d:heisenbug:jargon
curl dict://dict.org/d:daniel:web1913

别名m的意思是匹配(match)并查找(find),而别名d是定义(define)并查找(lookup)的意思。
例如:

curl dict://dict.org/find:curl

命令是使用RFC来描述URL的,但并不是DICT协议:

curl dict://dict.org/show:db
curl dict://dict.org/show:strat

操作这些操作是不需要认证,RFC本身也没有要求进行认证。

二十六、LDAP

如果你已经安装了OpenLDAP库,那么curl就可以对ldap://提供更为高级的支持了。

在Windows系统上, curl将默认使用平台提供的WinLDAP。

curl默认使用的协议版本为LDAPv3。只有在使用LDAPv3连接失败的情况下,才会降级使用LDAPv2

LDAP是一个复杂的东西,要写一个LDAP请求也不是一项轻松的任务。我强烈建议你从其他 什么地方查找相关的格式描述。其中一个存放地址如下:

RFC 2255, "The LDAP URL Format" https://curl.haxx.se/rfc/rfc2255.txt

这里举个例子,看看我是如何从我本地的LDAP服务器上获取所有人的,当然这个服务器有一个确定的子域名,这个子域名包含在电子邮件地址中:

curl -B ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se

如果我想得到HTML格式的相同信息的话,只需要去掉参数-B(强制ASCII)即可。

你也可以在访问LDAP目录的时候使用认证:

curl -u user:passwd "ldap://ldap.frontec.se/o=frontec??sub?mail=*"
curl "ldap://user:passwd@ldap.frontec.se/o=frontec??sub?mail=*"

默认的情况下,如果提供了用户名和密码,OpenLDAP/WinLDAP将会使用基本的认证方式进行认证。在Windows上,你可以通过向curl命令行提供下列参数之一来实现这一控制:--baisc, --ntlmdigest.
By default, if user and password provided, OpenLDAP/WinLDAP will use basic

curl --ntlm ldap://user:passwd@ldap.frontec.se/o=frontec??sub?mail=*

在Windows上,如果没有提供用户名和密码,将会自动使用当前登录的帐户认证信息(SSPI/SPNEGO)来进行认证。

二十七、环境变量

curl 能读取和理解下面这些环境变量:

http_proxy, HTTPS_PROXY, FTP_PROXY

这些变更应该被设置为协议指定的代理。

通常代理应该设置为:ALL_PROXY

如果限定一个以逗号分隔的主机列表中(,*则匹配所有主机)的所有主机都不可以通过任何代理服务器,则应该被设置为:NO_PROXY

如果主机名配置其中任何一个字符串,或者主机在其中任何一个字符串所包含的域中,这些节点将不能通过代理进行交互。当一个域被使用时,这需要先启动一段时间。用户可以通过对.example.com这个域名设置NO_PROXY来使www.example.comfoo.example.com这二个主机不能使用代理。通过使用主机全名你可以排除特定的主机名,针对 www.example.com设置NO_PROXY,就可以在禁止www.example.com使用代理的情况下,而仍旧可以让foo.example.com使用代理。

通过使用参数-x或者--proxy可以重写环境变量。

二十八、NETRC

Unix在很久以前就引入了.netrc的概念。其提供了一个方法让用户可以在一个文件中为经常需要访问的FTP站点指定用户名和密码,这样你在访问这些站点的时,就不需要每次都输入用户名和密码了。你应该已经意识到:如果其他人得到了你的密码,这将面临巨大的安全隐患,因此,除非只有你自己有可读权限外,大多数unix程序都不会读取这些文件。然而curl不会关心这些安全问题。

curl就可以支持通过参数-n/--netrc--netrc-optional来指定.netrc文件。而且不只是限定在FTP上使用,所以curl可以在需要认证的地方,针对所有协议使用这些文件。

一个非常简单的.netrc文件的内容,看起来应该是这样的:

machine curl.haxx.se login iamdaniel password mysecret

二十九、自定义输出

为了可以更好的让角本程序员了解关于curl的运行情况的相关信息,在这里引入了参数-w/--write-out。使用这些参数,你可以指定从上一次传输中提取你想要得到的信息。

要在完成传输后,另起一行,显示此次传输下载的总字节数,你需要使用如下的命令:

curl -w 'We downloaded %{size_download} bytes\n' www.download.com

三十、KERBEROS FTP传输

curl支持将kerberos4kerberos5/GSSAPI用于FTP传输。你需要在编译curl之前,完成kerberos软件的安装。
首先,通过常规方法获取krb-ticket, 比如使用kinit/kauth工具。
然后,通过以下的方法使用curl:

curl --krb private ftp://krb4site.com -u username:fakepwd

这里没有使用-u开关来指定密码,但是curl会提示你输入在使用kinit/kauth工具创建krb-ticket时所设置的密码。

三十一、TELNET

curl只支持基本的、非常简单的telnert操作。curl将标准输入的内容全部发送到远程服务器。连接到远程telnet服务器使用以下命令:

curl telnet://remote.server.com

然后将在标准输入中输入的数据传送至服务器。执行结果将被发送至标准输出,如果你希望将执行结果保存至文件,请使用参数-o

针对低速网络连接等情况,你也许通过参数-N/--no-buffer来关闭输出缓存。

通过使用参数-t,可以向telnet传送协议允许的选项。如果我们想告知服务器将使用vt100终端 来进行连接,应输入如下命令:

curl -tTTYPE=vt100 telnet://remote.server.com

对于-t, 其他有趣的选项还包括:
- XDISPLOC= 设置X的显示的位置。
- NEW_ENV=

三十二、持久连接

在一个命令中进行多个文件将会让curl按命令中指定的文件顺序一个接一个的传输所有的文件。

libcurl将会尝试使用持久连接来传输全部文件,这样第二个文件也可以使用已经完成初始化并仍旧对前一次传输开放的同一连接来进行传输。这样将大幅度减少传输全部文件所需的连接次数,对于网络的合理使用也大有好处。

注意:curl本身对于传输并不使用持久连接,传输的持久连接只是curl在随后发起的库调用。尽可能多的在一个命令行中使用大量的URL向同一服务器传输文件,这会里整体的传输速度变得更快。实际 上,如果你使用HTTP代理来传输文件,你就会发现所有的传输使用的都是持久连接。

三十三、单条命令行下的多路传输

根据上面内容提到的方法,通过简单的添加多个URL,你可以在一个命令中下载多个文件。如果你希望将这些文件存储到本地文件中而不是打印输出至标准输出的话,你需要针对每个URL指定选项-O(而不需要使用--remote-name-all)

例如:下载二个文件,对第一文件使用-O,并自定义第二文件的文件名:

curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg

你可以使用相似的模式来上传多个文件:

curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt

三十四、IPv6

当使用IPv4进行连接失败,并且服务器返回的是一个IPv6地址的情况下,curl将使用IPv6连接服务器。 选项--ipv4--ipv6,可以在这二种地址都可用时指定使用哪种地址进行连接。IPv6地址还可以在URL中直接进行指定,具体方法如下:

http://[2001:1890:1112:1::20]/overview.html

使用这种格式时,必须同时指定选项-g,否则curl将认为[]是全局字符,而导入停止执行命令。
本地链接和本地站点地址包含一个标识符范围,如fe80::1234%1,这些标识符也有可能被用到,但是其中一部分必须是数字或者匹配在linux系统中已经存在的网络适配器,并且百分号必须被URL转义。上一个例子中内容转换成SFTP URL将会是下面的样子:

sftp://[fe80::1234%251]/

IPv6地址在URL以外提供的选项不应该编码为URL,如:--proxy, --interface--ftp-port

curl支持Metalink,包括version 3 和 4 (RFC 5854),一种可以列出多个URI资源并针对文件可以进行hash的方法。

如果出现无法获取文件或者无法连接服务器等错误,curl将会把备用资源列表中资源做为镜像来使用。并且在下载完成之后,还会对文件进行hash校验。Metalink文件会在内存中完成上述的下载和处理工作,并不会将它们存储的本地文件系统中。

例如使用远程Metalink文件:

curl --metalink http://www.example.com/example.metalink

使用文件传输协议(file://)来使用本地文件系统中的Metalink文件:

curl --metalink file://example.metalink

请注意如果文件传输协议被禁用,就不能在写入时,使用本地Metalink文件。同样需要注意的是,如果--metalink--include同时被使用,--include将会被忽略。这是因为在应过其中中包含头部信息将会破坏Metalink分析器,同时如果头部信息被包含在一个被描述为Metalink的文件中,也会导致hash检测失败。

用于Curl问题反馈和改进的邮件列表

为了方便讨论curl、软件的开发以及与其相关的事宜,我们为您开放一了些邮件列表。你可以在如下网址获得相关信息https://curl.haxx.se/mail/。其中一些邮件列表为:

  • curl-users:

针对命令行工具的用户。讨论的内容包括:如何使用curl,软件工作异常,新功能,相关工具,使用中遇到的问题,新闻,安装,编译,运行,端口等等。

  • curl-library

开发者使用或者开发libcurl,包括:Bugs,扩展,改进。
- curl-announce

邮件量很少。只接受公布新版本的通知。最多每月发送一至二封邮件,通常情况下,每二个月只发送一封邮件。

  • curl-and-php

curl的函数应用于PHP, 包括所有curlPHP相关的内容。

用于反馈Python骇客在绑定pycurl的情况下,无论是否在python环境下使用curl遇到的问题。

请直接反馈curl的问题,功能性要求和故障报告到以上邮件列表中,而不要发送私人邮件。

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-12/149659.htm

linux
相关资讯       curl  curl 使用 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款