Basic Authentication в HttpClient, HttpPost, HttpGet в Java

Понадобилось для одной задачи получать данные из сервиса в сети. Но там была необходима аутентификация. Пару часов провозился пытаясь с хэдерами разобраться. Оказалось всё как обычно: есть уже готовые механизмы для этого.

Изначально пытался хэдеры сам прописать для 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));

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *