Dostęp do zasobów za pomocą HttpURLConnection jest prosty, jednak komplikuje się nieco w sytuacji, gdy dany zasób jest zabezpieczony hasłem htaccess (htpasswd).
W takiej sytuacji istnieją 2 rozwiązania. Zgodnie z definicją możemy spróbować ustawić odpowiednie nagłówki, aby przekazać login oraz hasło:
String login = "";
String password = "";
String encoding = new sun.misc.BASE64Encoder().encode(login + ":" + password.getBytes());
httpCon.setRequestProperty ("Authorization", "Basic " + encoding);
InputStream s = httpCon.getInputStream();
Rzeczą istotną, o której trzeba pamiętać jest to, że całość (login i hasło oddzielone dwukropkiem) muszą być przesłane w kodowaniu base64.
Wszystko by było super, gdyby nie jeden fakt – to nie (zawsze) działa. Drugą opcją jest zatem stworzenie funkcji zarządzającej hasłami w sytuacji, gdy HttpURLConnection natrafi na prośbę o hasło:
String login = "";
String password = "";
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(login, password.toCharArray());
}
});
HttpURLConnection httpCon = (HttpURLConnection)url.openConnection();
Powyższe rozwiązanie ma dodatkową przewagę nad pierwszą opcją – login i hasło będą przesyłane tylko wtedy, gdy rzeczywiście będą potrzebne. Jeżeli strona nie będzie wymagała ich podania to nie będą przesłane.