我试图通过ANT将文件FTP到服务器,其中密码包含&符号(&) 以下ANT目标:
<target name="upload_zip">
<ftp server="myhost.net"
userid="myusername"
password="topsecret&"
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
看起来认证并不成功。如果我没有逃脱&符号,那么我的构建文件就不能很好地形成了。我是否正确地逃避了&符号或做错了什么?
答案 0 :(得分:1)
我认为你使用的方法没有明显的问题 - 实体应该正确翻译。
要诊断自动ftp,最好先手动尝试类似(或相同!)的传输。通常,这将揭示目标文件系统中连接凭据或权限的任何外部问题。
如果手动传输有效,那么下一步就是“发现手动传输与Ant驱动传输之间的差异”。
ftp问题的堆栈跟踪可能表示存在连接前问题 - 一旦建立连接,您将看到FTP错误消息,例如:
这可能表示登录密码组合存在问题。
如果服务器关闭,您将获得类似以下内容的跟踪:
在您的情况下,似乎是中间代理的问题。对于未来的读者,this resource可能有助于通过防火墙问题诊断被动ftp。
尽管如此,在详细(-v
)或诊断(-diagnostics
)模式下运行Ant以查看Ant所做的内部结构也可能提供线索。