gpt4 book ai didi

java - 使用 Java 进行 FTP Put 命令通过 Squid HTTP 代理错误

转载 作者:行者123 更新时间:2023-12-01 05:43:40 26 4
gpt4 key购买 nike

我对 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 call terminated by uncaught Java exception: java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)

所以我用 FTPURLConnection 等尝试过,但遇到了同样的问题。

调试此问题时,ftpConn 中似乎有不少于三个名为 doOutput 的变量。
只有一个是可编辑的(而其他两个则不可编辑)

第一个(似乎是通过 getDoOutput 返回的)在设置 ftpConn.setDoOutput(true) 后返回 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 上全部失败。

感谢您提供任何帮助或指示来使其正常工作。

附注我使用的是 Java 1.5.0_10(我们在这里是为了与其他应用程序保持一致)

最佳答案

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

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

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

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

关于java - 使用 Java 进行 FTP Put 命令通过 Squid HTTP 代理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6471594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com