curl 使用举例详解(四)

5 篇文章 0 订阅

原文标题为:Manual – curl usage explained

十八、FTP的路径和文件名

需要强调的当从一个以ftp://开头的URL地址下获取文件的时候,给定的路径是与你进入的目录有相关的。如,从你的ftp站点的家目录中获取README,你需要执行:

curl ftp://user:passwd@my.site.com/README

但如果你想要从同一个站点的根目录中获取README文件的话,你就需要指定文件的绝对路径了:

curl ftp://user:passwd@my.site.com//README

在文件名之前多了一个额外的/

十九、SFTP和SCP的路径和文件名

对于sftp:scp:的URL来说,给定的路径和文件名都表示为在服务器上的绝对路径和文件名。对一个文件的访问与远程用户的家目录相关,在文件名上需要加上前缀/~/,例如:

curl -u $USER sftp://home.example.com/~/.bashrc

二十、FTP和防火墙

FTP协议要求在数据传输开始的同时再开放一条额外的连接给客户端。有二种方式可以完成这一操作

curl默认的方式是使用PASV命令让服务器再开放另一个端口等待已经连接的客户端来主动连接这一端口。对于客户端位于防火墙之后 ,而该防火墙不允许ftp通过防火墙主动连接客户端的情况,是非常好的解决方法。

curl ftp.download.com

对于如果ftp服务器也位于防火墙之后,该防火墙也不允许客户端主动连接除21端口之外的其他端口情况,又或者服务器根本就不支持PASV命令,这时就需要使用另一种方式:使用PORT命令,并通知服务器使用通过参数指定给PORT命令的IP和端口来主动连接客户端。

curl-P参数支持一些不同的选择。你的主机可能拥有多个IP地址或者多块网卡, curl允许你从它们当中进行选择。
使用默认的IP地址进行连接:

curl -P - ftp.download.com

使用le0网卡的IP地址,通过端口进行下载(windows不适用):

curl -P le0 ftp.download.com

使用IP地址:192.168.0.10 通过商品进行下载:

curl -P 192.168.0.10 ftp.download.com

二十一、网络适配器

使用指定的网卡,从服务器上获取一个web页面:

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

或者:

curl --interface 192.168.1.10 http://www.netscape.com/

二十二、HTTPS

使用安全的HTTP要求在编译curl之前完成SSL库的安装。如果按此操作,curl就具备了使用HTTPS协议进行获取和提交文档的能力了。
例如:

curl https://www.secure-site.com

curl还可以在要求使用证书认证的网站上使用你个人的证书来完成获取/提交的操作。唯一的缺点是证书需要用符合PEM格式(PEM-format)。PEM是用来存储证书的标准和开放的格式,但它不被大部分主流浏览器所使用(Netscape和MSIE使用的是被称为PKCS#12的格式)。如果你想让curl使用你最常用的浏览器所使用的证书,你需先下载和编译一个针对你浏览器证书格式的转换器,然后将你的浏览器证书转换成PEM格式。该转换器包含在最新版本的OpenSSL软件包中,对于之前版本的OpenSSL软件包Stephen
N. Henson博士已经编写了一个针对SSLeay的补丁来增加该功能。你可以从下面的网址获得该补丁,前提是要求先安装SSLeay:
http://www.drh-consultancy.demon.co.uk/

下面举例说明如何使用带有密码的个人证书来自动获取一份文档:

curl -E /path/to/cert.pem:password https://secure.site.com/

如果你忘记在命令行中指定证书的密码,程序将会在获取任何数据之前,提示你输入密码。

许多老版本的SSL服务器在使用新版本OpenSSL所使用的SSLv3或者TLS时会出现问题,因此有时为curl指定所需要使用的SSL版本是非常有用的方法。使用-3, -2或者-1(分别代表 SSLv3,SSLv2或者SSLv1)来精确指定curl所使用的SSL版本:

curl -2 https://secure.site.com/

除此之外,curl也会首先尝试使用v3,然后再使用v2

使用OpenSSL来将你常用的浏览器证书转换成curl可以使用的PEN格式的证书,你需要如下操作:
- 在Netscape中,你单击“安全”菜单按钮;
- 选择“证书 -> 你的证书”,然后在列表中选择一份证书;
- 单击“导出”按钮;
- 输入你的证书的PIN码;
- 为你的证书选择一个存储位置;
- 运行openssl程序进行证书转换。如果已经切换到openssl的安装目录,你可以执行如下命令:

# ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]

对于Firefox进行如下操作:选择“选项”,然后“高级”,然后选择“加密”标签,查看证书。这时会打开证书管理器,你在其中可以进行证书的导出操作。但是要确保选择PEM做为证书的导出类型。

对于MSIE进行如下操作:选择“Internet选项“,然后选择”内容“标签,然后选择”证书“。接下来,你就以可以转换为PEM格式的证书类型的将证书进行导出操作。

对于Chrome进行如下操作:选择”设置“,然后选择”显示高级设置“。在HTTPS/SSL下选择证书管理。

二十三、文件续传

对于文件的断点续传,curl支持HTTP(S)下载续传和FTP上传/下载续传。

下载续传一份文件:

curl -C - -o file ftp://ftp.server.com/path/file

上传续传一份文件(此功能要求FTP服务器支持非标准命令:SIZE。如果不支持,curl会进行告知。)

curl -C - -T file ftp://ftp.server.com/path/file

从web服务器下载续传一份文件(此功能要求web服务器最少支持HTTP/1.1.如果不支持,curl会进行告知。)

curl -C - -o file http://www.server.com/

二十四、时间条件

HTTP允许客户端根据文档的要求指定一个时间条件。这个条件就是“如果-被修改-自从”或者“如果-未被修改-自从”。curl允许你通过参数-z或者--time-cond 来指定条件。

例如你可以很张轻松的完成诸如如果服务器上的文件的修改日期比本地文件复本的新就进行下载这样的操作,具体方法如下:

curl -z local.html http://remote.server.com/remote.html

或者,你也可以反过来,在本地文件的修改日期比服务器上的文件新时,才下载。要实现这个操作,只需要在日期字符串的前面加上一个-即可:

curl -z -local.html http://remote.server.com/remote.html

你也可以指定一个任意的日期文本做为条件。告诉curl只从服务器上下载在2012-1-12之后(包含该日期)更新的文件:

curl -z "Jan 12 2012" http://remote.server.com/remote.html

curl也可以接受一个日期范围。你也可以使用加入-的方法来进行日期条件的设置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值