将Java用于Squid HTTP代理上的FTP Put命令错误
我对Java有点生疏,但在尝试通过SQUID HTTP代理将本地文件上载到远程FTP服务器时遇到了问题(请注意,这显然束缚了我的手脚,因此“FTP”和“SOCKS”代理类型不在范围内) 这是我的代码:将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
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)");
}