CURL库FTP上传问题“curl:(9) Server denied you to change to the given directory”解决方案及原因分析

最近用CURL进行FTP上传时老报异常:curl:(9) Server denied you to change to the given directory,在不同的FTP Server环境测试不100%重现。

观察后发现,当登录FTP Server时默认进的是根目录则没问题,否则会出上述异常,如:

FTP Server的根目录为“/data/ftp/”,其中有子目录“/data/ftp/demo/aaa/”。现在要上传文件d:/a.zip到 aaa目录,则CURL命令为:

curl -T d:/a.zip ftp://username:password@domain:21/demo/aaa/
如果登录FTP的默认路径为根/时正常上传;
如果登录FTP的默认路径为/demo/时会报“curl:(9) Server denied you to change to the given director”异常;

太蛋疼了这应该是CURL的一个Bug,CURL在解析FTP路径时会默认认为登录的是FTP Server的根目录,根据命令的路径查找后得出结果为“/data/ftp/demo/demo/aaa”所以异常。

解决方案有二:

  1. 根据以上分析CURL的路径解析规则,当默认登录目录为/data/ftp/demo/时使用命令“curl -T d:/a.zip ftp://username:password@domain:21/aaa/”,命令中去掉demo目录,解析后的路径就是正确的了;

  2. 修改CURL的源代码,自己重新编一个库,对大多数人来说这代价太高,有兴趣的朋友可以尝试一下,具体修改方案可参考(http://blog.csdn.net/langeldep/article/details/6166218

标签:curl, ftp

添加新评论