Понадобилось для одной задачи получать данные из сервиса в сети. Но там была необходима аутентификация. Пару часов провозился пытаясь с хэдерами разобраться. Оказалось всё как обычно: есть уже готовые механизмы для этого.
Изначально пытался хэдеры сам прописать для HttpPost, HttpGet:
HttpPost httpPost = new HttpPost(site.getUrl()); httpPost.setEntity(new UrlEncodedFormEntity(params)); httpPost.setHeader("Authorization", "Basic " + Base64String(site.login, site.password)); String paramString = URLEncodedUtils.format(params, "utf-8"); HttpGet httpGet = new HttpGet(site.getUrl()+"?" + paramString); httpGet.setHeader("Authorization", "Basic " + Base64String(site.login, site.password));
Для шифрования этот метод юзать:
private String Base64String(String login, String pas){ String text = login+":"+ pas; byte[] data = null; try { data = text.getBytes("UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } String base64 = Base64.encodeToString(data, Base64.DEFAULT); return base64; }
Но всё равно не получилось. В итоге, оказалось, что можно самому DefaultHttpClient
задать параметры авторизации.
DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "basic"), new UsernamePasswordCredentials(site.login, site.password) );
Или:
DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthPolicy.BASIC), new UsernamePasswordCredentials(site.login, site.password) );