Понадобилось для одной задачи получать данные из сервиса в сети. Но там была необходима аутентификация. Пару часов провозился пытаясь с хэдерами разобраться. Оказалось всё как обычно: есть уже готовые механизмы для этого.
Изначально пытался хэдеры сам прописать для 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));