В моем браузере или в iOS, когда я пытаюсь получить содержимое URL с закодированной информацией аутентификации http в форме
http://myUser:myPassword@www.example.com/secure/area/index.html
Это просто работает.Я получаю URL-адреса от веб-службы, и я хотел бы не пытаться проанализировать их на предмет их подлинной информации HTTP, если я могу помочь.Есть ли способ сделать что-то подобное в Android без фактического разбора URL-адресов?В качестве альтернативы, как лучше всего это сделать?
ОБНОВЛЕНИЕ: я обнаружил, что когда я пытаюсь установить информацию аутентификации в заголовке авторизации, я получаю очень странное исключение 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();
Кажется, что вся информация проверена, я убедился, что URL-адрес правильный, строка 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, но увидел, чтов выпуск 16041 рекомендуется, чтобы мы предпочли URLConnection.