在我的瀏覽器,或在iOS上,當我試圖讓與編碼HTTP認證信息的URL的內容,形式如何從Android中的URL使用http認證信息?
http://myUser:[email protected]/secure/area/index.html
這只是工作。我從Web服務獲取URL,並且如果可以幫助的話,我想避免嘗試解析它們的HTTP認證信息。有沒有辦法在沒有真正解析URL的情況下在Android中做類似的事情?或者,最好的方法是什麼?
更新: 我發現,當我嘗試在授權標頭中設置身份驗證信息時,出現一個非常奇怪的FileNotFoundException。
下面是我使用的代碼:
URL url = new URL(urlString);
URLConnection connection;
String authority = url.getAuthority();
if (authority.contains("@")) {
String userPasswordString = authority.split("@")[0];
url = new URL(urlString.replace(userPasswordString + "@", ""));
connection = url.openConnection();
String encoded = new String(Base64.encode(userPasswordString.getBytes(), Base64.DEFAULT), "UTF-8");
connection.setRequestProperty("Authorization", "Basic " + encoded);
} else {
connection = url.openConnection();
}
InputStream responseStream = connection.getInputStream();
所有的信息似乎要結賬,我已經驗證的網址是否正確,以base64字符串是正確的,該文件肯定是在服務器上 - 我用Firefox打開它並沒有什麼問題,Firebug顯示了所有正確的標題,與我發送的內容相匹配。我得到雖然是以下錯誤(URL主機改變,以保護無辜):
java.io.FileNotFoundException: http://a1b.example.com/grid/uploads/profile/avatar/user1/custom-avatar.jpg
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1061)
任何想法這是什麼一回事?
我看着使用HttpClient,但看到在Issue 16041建議我們更喜歡URLConnection。
更新的問題 – 2011-05-12 15:40:32