2009-11-24 134 views
1

我有一些應該連接到https網站,並接收一些。 隨着連接一切正常,但是當我什麼的getInputStream()來異常:通過https連接到網站

產生java.io.IOException:服務器返回的HTTP響應代碼:403網址:

這裏是代碼的一部分:

String query = siteURL.toExternalForm(); 

    URL queryURL = new URL(query); 

    String data = "username="+login+"&password="+password; 

    URLConnection connection = queryURL.openConnection(); 

    connection.setDoOutput(true); 

    OutputStreamWriter writer = new OutputStreamWriter(connection 
      .getOutputStream()); 
    writer.write(data); 
    writer.flush(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
+0

你確定用戶名和密碼是參數嗎?通常(特別是在安全的情況下)有請求標題。 – Trick 2009-11-24 14:43:03

+0

但是,當我嘗試通過瀏覽器連接到此資源時,一切正常。例如: 如果查詢= https://開頭的URL/WebHome 數據=用戶名=測試與密碼=測試 的https:// URL/WebHome用戶名=測試與密碼=測試 – 2009-11-24 14:51:34

+0

我已經試過這樣, connection.addRequestProperty(」用戶名「,登錄); connection.addRequestProperty(「password」,password); 但同樣的問題... – 2009-11-24 15:13:57

回答

1

看起來你不能做你想做的事情,你會得到一個HTTP 403: Forbidden

你能在瀏覽器中打開相同的URL嗎?

+0

有趣的事情,我可以在瀏覽器中打開它 而我發現,實際上,如果我嘗試connection.connect(); 然後連接變量是假的... – 2009-11-24 14:44:01

1

我認爲該網站有一個自定義的身份驗證機制,在此你必須提供我們的用戶名和密碼作爲GET參數。因此,您的網址應如下所示:

URL url = new URL("http://somesite.org/page?username=<username>&password=password"); 
... = url.openConnection(); 
... 

如果使用url.openConnection,則會完成HTTP GET請求。如果您想要通過請求發送數據,則必須使用HTTP POST請求。在這種情況下,您可以使用第三方庫,如Apache Commons HttpClient。

順便說一句:爲什麼你創建一個新的URL對象,如果你已經有一個?

+0

它不工作(( BTW:爲什麼是U創建一個新的URL對象,如果你已經有了一個 >>我只有一個URL對象 - > queryURL – 2009-11-24 15:35:32

+0

?然而,Salandur可能是正確的,您正在向服務器發出GET請求,但是嘗試將請求參數寫入請求主體,通常只有POST請求支持該請求參數。 – jarnbjo 2009-11-24 16:40:43

+0

@Le_Coeur:您必須擁有另一個請求參數你正在調用String query = siteURL.toExternalForm(); – Salandur 2009-11-25 09:51:21