Поиск по сайту:

Пример Apache HttpClient — CloseableHttpClient


Apache HttpClient можно использовать для отправки HTTP-запросов с клиентского кода на сервер. В нашем последнем руководстве мы увидели, как использовать HttpURLConnection для выполнения операций HTTP-запросов GET и POST из самой программы Java. Сегодня мы возьмем тот же пример проекта, но воспользуемся Apache HttpClient для выполнения операций запросов GET и POST.

HTTP-клиент Apache

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.4</version>
</dependency>

Однако, если вы не используете Maven, вам необходимо добавить следующие jar-файлы в путь сборки вашего проекта, чтобы он работал.

  1. httpclient-4.4.jar
  2. httpcore-4.4.jar
  3. commons-logging-1.2.jar
  4. commons-codec-1.9.jar

  1. Создайте экземпляр CloseableHttpClient, используя вспомогательный класс HttpClients.
  2. Создайте экземпляр HttpGet или HttpPost на основе типа HTTP-запроса.
  3. Используйте метод addHeader, чтобы добавить необходимые заголовки, такие как User-Agent, Accept-Encoding и т. д.
  4. Для POST создайте список NameValuePair и добавьте все параметры формы. Затем задайте для него объект HttpPost.
  5. Получите CloseableHttpResponse, выполнив запрос HttpGet или HttpPost.
  6. Получение из ответа необходимых сведений, таких как код состояния, информация об ошибке, HTML-код ответа и т. д.
  7. Наконец закройте ресурс apache HttpClient.

Ниже приведена последняя программа, которая показывает, как использовать Apache HttpClient для выполнения HTTP-запросов GET и POST в самой программе Java.

package com.journaldev.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;

public class ApacheHttpClientExample {

	private static final String USER_AGENT = "Mozilla/5.0";

	private static final String GET_URL = "https://localhost:9090/SpringMVCExample";

	private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home";

	public static void main(String[] args) throws IOException {
		sendGET();
		System.out.println("GET DONE");
		sendPOST();
		System.out.println("POST DONE");
	}

	private static void sendGET() throws IOException {
		CloseableHttpClient httpClient = HttpClients.createDefault();
		HttpGet httpGet = new HttpGet(GET_URL);
		httpGet.addHeader("User-Agent", USER_AGENT);
		CloseableHttpResponse httpResponse = httpClient.execute(httpGet);

		System.out.println("GET Response Status:: "
				+ httpResponse.getStatusLine().getStatusCode());

		BufferedReader reader = new BufferedReader(new InputStreamReader(
				httpResponse.getEntity().getContent()));

		String inputLine;
		StringBuffer response = new StringBuffer();

		while ((inputLine = reader.readLine()) != null) {
			response.append(inputLine);
		}
		reader.close();

		// print result
		System.out.println(response.toString());
		httpClient.close();
	}

	private static void sendPOST() throws IOException {

		CloseableHttpClient httpClient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(POST_URL);
		httpPost.addHeader("User-Agent", USER_AGENT);

		List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
		urlParameters.add(new BasicNameValuePair("userName", "Pankaj Kumar"));

		HttpEntity postParams = new UrlEncodedFormEntity(urlParameters);
		httpPost.setEntity(postParams);

		CloseableHttpResponse httpResponse = httpClient.execute(httpPost);

		System.out.println("POST Response Status:: "
				+ httpResponse.getStatusLine().getStatusCode());

		BufferedReader reader = new BufferedReader(new InputStreamReader(
				httpResponse.getEntity().getContent()));

		String inputLine;
		StringBuffer response = new StringBuffer();

		while ((inputLine = reader.readLine()) != null) {
			response.append(inputLine);
		}
		reader.close();

		// print result
		System.out.println(response.toString());
		httpClient.close();

	}

}

Когда мы запускаем вышеуказанную программу, мы получаем HTML-код, аналогичный полученному в браузере.

GET Response Status:: 200
<html><head>	<title>Home</title></head><body><h1>	Hello world!  </h1><P>  The time on the server is March 7, 2015 1:01:22 AM IST. </P></body></html>
GET DONE
POST Response Status:: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj Kumar</h3></body></html>
POST DONE

Это все, что касается примера Apache HttpClient, он содержит множество служебных методов, которые вы можете использовать. Поэтому я бы посоветовал вам проверить их для лучшего понимания.