2013-07-25 79 views
1

我編寫了一個程序,該程序將獲取由URL指定的文件。但我的代碼給我「服務器返回的HTTP響應代碼:401的URL」。我GOOGLE了這一點,發現,這個錯誤是由於認證失敗。所以我的問題是:我可以如何傳遞我的用戶名和密碼以及我的URL?
這裏是我的代碼服務器返回的HTTP響應代碼:401(通過URL中的用戶名和密碼訪問文件)

String login="dostix12"; 
String password="@@@@@"; 
String loginPassword = login+ ":" + password; 
String encoded = new sun.misc.BASE64Encoder().encode (loginPassword.getBytes()); 
URL url = new URL("https://level.x10hosting.com:2083/cpsess5213137721/frontend/x10x3/filemanager/showfile.html?file=factorial.exe&fileop=&dir=%2Fhome%2Fdostix12%2Fetc&dirop=&charset=&file_charset=&baseurl=&basedir="); 
url.openConnection(); 
+0

我們沒有任何超能力去猜測你的code.Please我們展示的代碼 –

+0

你有沒有嘗試過的[默認HTTP認證機制]的(http://en.wikipedia.org/wiki/Basic_access_authentication)? – mthmulders

+0

是的,我確實............. – Vicky

回答

4

這將取決於服務器是如何期待的憑據。接受認證細節的一般方式是使用BASIC認證機制。在基本身份驗證中,您需要設置Authroization http頭。

授權頭構造如下:

的用戶名和密碼被組合成一個字符串「用戶名:密碼」

所得字符串文字隨後使用的Base64

授權編碼方法和一個空格,即「基本」,然後放在 之前的編碼字符串。

例如,如果用戶代理使用「阿拉丁」作爲用戶名和 「芝麻開門」作爲密碼,然後報頭被形成爲如下:

授權:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==

來源:http://en.wikipedia.org/wiki/Basic_access_authentication

下面是示例代碼添加授權頭:

url = new URL(targetURL); 
    connection = (HttpURLConnection)url.openConnection(); 
    BASE64Encoder enc = new sun.misc.BASE64Encoder(); 
    String userpassword = username + ":" + password; 
    String encodedAuthorization = enc.encode(userpassword.getBytes()); 
    connection.setRequestProperty("Authorization", "Basic "+ 
     encodedAuthorization); 
+0

請看看我編輯過的帖子。 – Vicky

+0

@ user2606088檢查編輯過的示例代碼。 –

+0

connection.setRequestProperty(「Authorization」,「Basic」+ encodedAuthorization);連接在你的代碼中意味着什麼 – Vicky

4

使用的代碼之後,它會工作:

final URL url = new URL(urlString); 
Authenticator.setDefault(new Authenticator() 
{ 
    @Override 
    protected PasswordAuthentication getPasswordAuthentication() 
    { 
    return new PasswordAuthentication(userName, password.toCharArray()); 
    } 
}); 
final URLConnection connection = url.openConnection(); 
相關問題