2011-06-24 49 views
1

我對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(我們在這裏保持與其他應用程序的一致性)

+0

很好發現這是metalink中的一個錯誤(Bug 6519647)。解決方法幾乎是使用不同的東西!不知道如何標記這是正確的(因爲它是我自己的),我不認爲關閉它必然是正確的過程(因爲它有一個解決方案) – Harrison

回答

0

很好發現這是metalink中的一個錯誤(錯誤6519647)。解決方法幾乎是使用不同的東西!

(這個錯誤仍然存​​在,無論代理是如何設置(與/ wihtout的「HTTP」,甚至通過代理類)

遺憾的重複編輯/答案,這是我的第一個「答案」對我自己的問題。

切換到ftp4j,但仍然遇到魷魚代理問題(這是一個完全不同的故事)。

相關問題