我對Java有點綠色,但在嘗試通過SQUID HTTP代理上傳本地文件到遠程FTP服務器時遇到了問題(請注意,這顯然很明顯綁住我的手,使'FTP'和'SOCKS'代理類型不在範圍內)。使用Java for FTP Put命令通過Squid HTTP代理錯誤
因此,這裏是我的代碼:
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.ProtocolException: 無法寫入一個URLConnection if doOutput = false - 致電 setDoOutput(true)
所以我試圖用FTPURLConnection等,並有同樣的問題。
調試時,似乎有不少於三個變量,在ftpConn中稱爲doOutput。
只有一個是可編輯的(而另外兩個都沒有)
第一個(它似乎是通過getDoOutput返回的一個)ftpConn.setDoOutput的設置後返回真(真正);。
看在源代碼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還是別的?
我已經能夠成功地通過代理獲取GETs,但PUTs都在doOutput上失敗。
感謝您的任何幫助或指示,讓這個工作。
P.S. 我正在使用Java 1.5.0_10(我們在這裏保持與其他應用程序的一致性)
很好發現這是metalink中的一個錯誤(Bug 6519647)。解決方法幾乎是使用不同的東西!不知道如何標記這是正確的(因爲它是我自己的),我不認爲關閉它必然是正確的過程(因爲它有一個解決方案) – Harrison