2012-01-06 26 views
0

我手動執行的操作: 1.我打開網址:http://localhost:8080/webadmin/index.html輸入登錄名和密碼。 2.並點擊按鈕至極真的做HTTP GET請求:http://localhost:8080/rest/platform/domain/list如何使用java授權到HTTP服務器

我做在Java中:

String addr = "http://localhost:8080/rest/platform/domain/list?_dc=1325843792402"; //"http://localhost:8080/webadmin/index.html"; 

      URL url = new URL(addr); 
      HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
      httpCon.setDoOutput(true); 
      httpCon.setDoInput(true); 
      httpCon.setUseCaches(false); 
      httpCon.setAllowUserInteraction(false); 
      httpCon.setRequestMethod("GET"); 
      OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream()); 

      System.out.println(httpCon.getResponseCode()); 
      System.out.println(httpCon.getResponseMessage()); 
      out.close(); 

並獲得響應:401未經授權。 可以理解的原因:我應該通過輸入登錄名和密碼來創建授權連接。但我怎麼能做到這一點?

+0

http://stackoverflow.com/questions/4883100/how-to -handle-http-authentication-using-httpurlconnection – Manish 2012-01-06 10:35:57

+0

Manish,謝謝你的評論對我非常有幫助。 – 2012-01-06 14:51:56

回答

1

使用表單域在網頁認證,會發生什麼情況如下:

  1. 您訪問登錄頁面。服務器使用以下方法之一標記會話:
    • 會話cookie,存在於HTTP響應頭中。你應該存儲這個cookie並在之後重新發送。
    • 重定向到其中所述會話被標記一個新的URL(HTTP://本地主機:8080/sessionKey = 3292n9fafjwagwao2903j2fswioanw)
    • (有時),其包含會話密鑰和其隱藏的HTML表單或Javascript變量是POST」在每次點擊鏈接時編輯。
  2. 讓我們假設服務器使用cookie。然後您執行POST請求,其中包含:
    • 您收到的cookie。
    • 您在POST數據
  3. 服務器現在標誌着你會爲「登錄」,甚至可能給你一個新的或額外的會話標識符的用戶名和密碼。
  4. 然後,您可以訪問受保護的資源,提供會話標識符證明您已登錄。

你可以按照這個過程非常漂亮的使用谷歌Chrome開發者網絡視圖(按CTRL + SHIFT + J,去網絡。

你怎麼翻譯這個Java代碼?

  1. 請登錄頁面初始請求。從HTTP標頭中恢復會話Cookie。
  2. 對登錄表單目的地執行POST。將會話cookie包含在HTTP請求標題和POST數據中的用戶名/密碼中。從HTTP標頭中恢復會話Cookie。
  3. 現在訪問受保護的資源。將會話cookie包含在HTTP請求頭中。

當然,在web服務器級別(HTTP BASIC身份驗證,NTLM ...)中還有其他一些身份驗證方法,如其他答案所述。上述方法僅適用於基於HTML FORM的身份驗證(如Facebook,Dropbox,...以及幾乎所有主要網站所使用的)

+1

如果您使用Firefox,請使用「Live HTTP Headers :: Firefox附加組件」 – RanRag 2012-01-06 10:49:29