1

我正在尝试通过 ANT 将文件 FTP 到密码包含与号 (&) 的服务器以下 ANT 目标:

<target name="upload_zip">
    <ftp server="myhost.net"
         userid="myusername"
         password="topsecret&amp;"
         port="21"
         remotedir="/public_html"
         passive="yes"
         binary="yes">
        <fileset dir=".">
            <include name="${updatefile}"   />
        </fileset>
    </ftp>
</target>

失败并显示此消息:

error during FTP transfer:  java.net.SocketException: Permission denied: recv failed  
   at java.net.SocketInputStream.socketRead0(Native Method) 
   at java.net.SocketInputStream.read(SocketInputStream.java:150)  
   at ... // really long stack trace

好像认证不成功。如果我不逃避 & 符号,那么我的构建文件格式不正确。我是正确地转义了&符号还是做错了什么?

4

1 回答 1

1

我认为您使用的方法没有明显的问题 - 实体应该被正确翻译。

要诊断自动 ftp,最好先手动尝试类似(或相同!)传输。通常这将揭示目标文件系统中的连接凭据或权限的任何外部问题。

如果手动传输有效,那么下一步将是“发现手动传输和 Ant 驱动传输之间的差异”。

ftp 问题的堆栈跟踪可能表明存在连接前问题 - 一旦建立连接,您将看到 FTP 错误消息,例如:

  • 无法登录 FTP 服务器

这可能表明登录密码组合存在问题。

如果服务器关闭,您将获得类似以下内容的跟踪:

  • java.net.ConnectException:连接被拒绝

尽管在您的情况下,这似乎是中间代理的问题。对于未来的读者,此资源可能有助于通过防火墙问题诊断被动 ftp。

Failing all that, running Ant in verbose (-v) or diagnostic (-diagnostics) modes to see the innards of what Ant is doing may also give a clue.

于 2012-09-25T20:25:40.483 回答