将Java用于Squid HTTP代理上的FTP Put命令错误

将Java用于Squid HTTP代理上的FTP Put命令错误,java,proxy,ftp,squid,Java,Proxy,Ftp,Squid,我对Java有点生疏,但在尝试通过SQUID HTTP代理将本地文件上载到远程FTP服务器时遇到了问题(请注意,这显然束缚了我的手脚,因此“FTP”和“SOCKS”代理类型不在范围内) 这是我的代码: URL url = new URL(urlString); OutputStream os ; Sy

我对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终止 异常:java.net.protocole异常: 如果发生以下情况,则无法写入URLConnection doOutput=false-调用 设置输出(真)

所以我尝试了FTPURLConnection等,也遇到了同样的问题

调试时,ftpConn中至少有三个变量被称为doOutput。
只有一个可编辑(而其他两个不可编辑)

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

查看源代码以获取

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

这就是我认为断开连接的地方(对我、库或代理而言)

我是否错过了设置setDoOutput或其他的方法

我已经能够成功地从GET的代理中挖掘出来,但是PUT在doOutput上都失败了

感谢您的帮助或指点,让这个工作

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

我们发现这是metalink中的一个bug(bug 6519647)。解决方法是使用不同的东西

(无论如何设置代理(使用/wihtout“http.”,甚至通过代理类),此错误都会持续存在)

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

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

我们发现这是metalink中的一个错误(错误6519647)。解决方法是使用不同的东西!不确定如何将其标记为正确的(因为这是我自己的),我认为关闭它不一定是正确的过程(因为它有一个决议)
 public synchronized OutputStream getOutputStream()
                    throws IOException {

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