在Linux下cURL使用教程之一:cURL简介里,提到curl支持多种协议。本篇就以ftp协议为主,对curl对其他协议的操作进行简介。
基本使用
基本使用方法同HTTP没有区别:
curl ftp://ftp.cisco.com/pub/mibs/ |
只不过ftp一般会有用户名密码,所有在命令中要加上用户名密码:
curl -u ftpuser:ftppass -O ftp://ftp_server/index.php |
或者
curl ftp:// ftpuser:ftppass ftp://ftp_server/index.php |
上传文件
使用-T选项。具体请参考Linux下cURL使用教程之六:curl基本使用之HTTP文件上传。
上传一个文件:
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com |
上传多个文件:
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com |
从标准输入获得文件内容:
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt |
这个命令会将标准输入的内容保存在ftp://ftp.testserver.com/myfile_1.txt中。
FTP四种模式
FTP有两种基本模式:PASV和PORT,也即主动模式和被动模式。在二者基础上分别有两种扩展:ERSV和EPRT。具体请参考相关RFC文档。
curl默认使用EPSV模式:
curl --verbose ftp://ftp_server/ --user user |
会看到curl执行了EPSV命令。–eprt参数显式指定使用EPRT模式。
使用--disable-epsv
选项禁用EPSV而使用PASV:
curl --verbose --disable-epsv ftp://ftp_server/ --user user |
使用-P/--ftp-port <address>
选项指定使用EPRT,其中address参数可以指定为“-”,指定使用FTP控制连接相同的地址:
curl --verbose --ftp-port - ftp://ftp_server/ --user user |
会看到使用了EPRT命令。
而使用--disable-epsv
选项,如:
curl --verbose --ftp-port - --disable-epsv ftp://ftp_server/ --user user |
及指定了使用PORT模式。
其他协议
以SMTP协议发邮件为例,执行:
curl --verbose --ssl --mail-rcpt test@163.com --mail-from test@163.com smtp://smtp.163.com -u test |
–ssl指定使用SSL, smtp://一定要加在url上,否则curl会使用默认的HTTP协议。
之后,按提示输入如下内容:
Subject: Testing |
即可发送邮件。
但是估计是有防作弊机制,测试发现163、GMAIL的SMTP发信都失败,提示“curl: (67) Access denied: 500”,追踪详细过程,发现是“MAIL FROM: test@163.com”这句提示语法错误。不知道是什么原因。
但是使用自己搭建的邮件服务器测试成功。