Пользовательский пользовательский агент в HttpClient 4

Пользовательский User-Agent в HttpClient 4

1. обзор

Это краткое руководство покажетhow to send a custom User-Agent header using Apache HttpClient 4.

2. УстановкаUser-Agent наHttpClient

2.1. До HttpClient 4.3

При работе со старыми версиями Http Client (до 4.3) установка значенияUser-Agent выполняласьvia a low level API:

client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 Firefox/26.0");

То же самое можно сделать с помощьюa higher level API as well - не обращаясь к необработанному свойствуhttp.useragent:

HttpProtocolParams.setUserAgent(client.getParams(), "Mozilla/5.0 Firefox/26.0");

Полный пример будет выглядеть так:

@Test
public void whenClientUsesCustomUserAgent_thenCorrect()
  throws ClientProtocolException, IOException {
    DefaultHttpClient client = new DefaultHttpClient();
    HttpProtocolParams.setUserAgent(client.getParams(), "Mozilla/5.0 Firefox/26.0");

    HttpGet request = new HttpGet("http://www.github.com");
    client.execute(request);
}

2.2. После HttpClient 4.3

В последней версии клиента Apache (после 4.3) то же самое достигается гораздо более простым способом с помощью новых свободно распространяемых API:

@Test
public void whenRequestHasCustomUserAgent_thenCorrect()
  throws ClientProtocolException, IOException {
    HttpClient instance = HttpClients.custom().setUserAgent("Mozilla/5.0 Firefox/26.0").build();
    instance.execute(new HttpGet("http://www.github.com"));
}

3. УстановкаUser-Agent для индивидуальных запросов

Пользовательский заголовокUser-Agent также может быть установлен для отдельных запросов, а не для всегоHttpClient:

@Test
public void givenDeprecatedApi_whenRequestHasCustomUserAgent_thenCorrect()
  throws ClientProtocolException, IOException {
    HttpClient instance = HttpClients.custom().build();
    HttpGet request = new HttpGet(SAMPLE_URL);
    request.setHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 Firefox/26.0");
    instance.execute(request);
}

4. Заключение

В этой статье показано, как можноuse the HttpClient to send requests with custom User-Agent header - например, имитировать поведение конкретного браузера.

Реализация всех этих примеров и фрагментов кодаcan be found in my github project - это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.