2012-07-06 27 views
1

我試圖模仿這種行爲在java中HttpClient的認證 -

curl -u usrname:password http://somewebsite.com/docs/DOC-2264 

我不知道,如果AUTH是NTLM或基本。我登錄到提供用戶名和密碼的網站。這是一個表單帖子。使用上面的curl命令,我可以登錄並獲取內容。

在Java中我沒有做到這一點:

try { 
     URL url = new URL("http://somewebsite.com/docs/DOC-2264"); 
     String authStr ="username:password"; 
     String encodedAuthStr = Base64.encodeBytes(authStr.getBytes()); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setDoOutput(true); 
     onnection.setRequestProperty("Authorization", "Basic" + encodedAuthStr); 

     InputStream content = (InputStream)connection.getInputStream(); 
     BufferedReader in = 
      new BufferedReader (new InputStreamReader (content)); 
     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     }   


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

但我只得到了登錄頁面。不是實際的內容。 我在做什麼錯?

回答

1
  1. 你可以看到確切的標題curl通過添加-v(詳細)選項發送。
  2. Authorization標頭需要base64編碼的用戶名/密碼之前的認證類型。它應該看起來像這樣:Authorization: Basic dXNybmFtZTpwYXNzd29yZA==
+0

我改變了我的帖子,以反映這一點。我試過-v選項,看到它使用基本身份驗證 – 12rad 2012-07-06 21:08:39

+0

它還設置了一個cookie: 12rad 2012-07-06 21:09:28

+0

您需要在Basic和用戶名/密碼 – ataylor 2012-07-06 21:29:24

0

也許捲曲只是做的這相當於:

URL url = new URL("http://username:[email protected]/docs/DOC-2264"); 
+0

沒有。這沒有工作:( – 12rad 2012-07-06 20:31:39