使用Java for FTP Put命令通过Squid HTTP代理错误

时间:2011-06-24 17:38:02

标签: java proxy ftp squid

我对Java有点绿,但在尝试通过SQUID HTTP代理将本地文件上传到远程FTP服务器时遇到了一个问题(请注意这显然是我的双手,以便'FTP'和'SOCKS '代理类型不在范围内)。

所以这是我的代码:

                       URL url = new URL(urlString);
                       OutputStream os ;                             

                       System.setProperty("proxySet", "true");
                       System.setProperty("proxyHost", proxyHost.trim());
                       System.setProperty("proxyPort", proxyPort.stringValue());


                       URLConnection ftpConn = url.openConnection() ;
                       ftpConn.setAllowUserInteraction(true); //threw this in to see if it would work, does nothing
                       ftpConn.setDoOutput(true); //here is where I set the setDoOutput
                       os = ftpConn.getOutputStream(); //here is where the exception occurs

我一直得到这个例外:

  

Java调用由未被捕获的Java终止   exception:java.net.ProtocolException:   如果不能写入URLConnection   doOutput = false - 调用   setDoOutput(真)

所以我用 FTPURLConnection 等尝试了这个问题并且遇到了同样的问题。

调试时,似乎在ftpConn中有不少于三个名为 doOutput 的变量。
只有一个是可编辑的(而另外两个不是)

在设置 ftpConn.setDoOutput(true)之后,第一个(似乎是通过 getDoOutput 返回的那个)返回 true ;

查看HttpURLConnection:

的源代码
 public synchronized OutputStream getOutputStream()
                    throws IOException {

                try {
                    if (!doOutput) {
                        throw new ProtocolException(
                                "cannot write to a URLConnection"
                                        + " if doOutput=false - call setDoOutput(true)");
                    }

查看FtpURLConnection中的代理处理使我相信,当它确定您正在使用HTTP代理时,它会将处理传递给HttpURLConnection。

这是我认为发生断开连接的地方(无论是我还是图书馆或代理人)。

我是否错过设置 setDoOutput 或其他内容?

我已经能够成功地通过代理获取GET,但PUT在doOutput上都是FAILING。

感谢您提供任何帮助或指示,让它发挥作用。

P.S。 我正在使用Java 1.5.0_10(我们在这里与其他应用程序保持一致)

1 个答案:

答案 0 :(得分:0)

很好地发现这是metalink中的一个错误(错误6519647)。解决方法几乎是使用不同的东西!

(无论代理如何设置(使用/不使用“http。”,甚至通过代理类),此错误仍然存​​在

抱歉重复编辑/回答,这是我对自己问题的第一个'回答'。

切换到ftp4j但仍然遇到squid代理问题(这是一个完全不同的故事)。