Прокси-сервер является промежуточным сервером между клиентом и Интернетом. Прокси-серверы предлагают следующие основные функции —
-
Межсетевой экран и сетевая фильтрация данных
-
Совместное использование сетевого подключения
-
Кеширование данных
Межсетевой экран и сетевая фильтрация данных
Совместное использование сетевого подключения
Кеширование данных
Используя библиотеку HttpClient, вы можете отправить HTTP-запрос через прокси. Следуйте инструкциям ниже
Шаг 1 — Создайте объект HttpHost
Создайте экземпляр класса HttpHost пакета org.apache.http , передав строковый параметр, представляющий имя прокси-хоста (от которого вам нужно отправить запросы) его конструктору.
//Creating an HttpHost object for proxy HttpHost proxyHost = new HttpHost("localhost");
Таким же образом создайте еще один объект HttpHost для представления целевого хоста, на который необходимо отправлять запросы.
//Creating an HttpHost object for target HttpHost targetHost = new HttpHost("google.com");
Шаг 2 — Создание объекта HttpRoutePlanner
Интерфейс HttpRoutePlanner вычисляет маршрут к указанному хосту. Создайте объект этого интерфейса, создав экземпляр класса DefaultProxyRoutePlanner , который является реализацией этого интерфейса. В качестве параметра его конструктору передайте созданный выше прокси-хост —
//creating a RoutePlanner object HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
Шаг 3 — Установите планировщик маршрута для строителя клиента
Используя метод custom () класса HttpClients , создайте объект HttpClientBuilder и установите для этого объекта планировщик маршрутов, созданный выше, с помощью метода setRoutePlanner () .
//Setting the route planner to the HttpClientBuilder object HttpClientBuilder clientBuilder = HttpClients.custom(); clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
Шаг 4 — Постройте объект CloseableHttpClient
Создайте объект CloseableHttpClient , вызвав метод build () .
//Building a CloseableHttpClient CloseableHttpClient httpClient = clientBuilder.build();
Шаг 5 — Создать HttpGetobject
Создайте HTTP-запрос GET, создав экземпляр класса HttpGet .
//Creating an HttpGet object HttpGet httpGet = new HttpGet("/");
Шаг 6 — Выполнить запрос
Один из вариантов метода execute () принимает объекты HttpHost и HttpRequest и выполняет запрос. Выполнить запрос, используя этот метод —
//Executing the Get request HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);
пример
В следующем примере показано, как отправить HTTP-запрос на сервер через прокси. В этом примере мы отправляем HTTP-запрос GET на google.com через localhost. Мы напечатали заголовки ответа и текст ответа.
import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.routing.HttpRoutePlanner; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; import org.apache.http.util.EntityUtils; public class RequestViaProxyExample { public static void main(String args[]) throws Exception{ //Creating an HttpHost object for proxy HttpHost proxyhost = new HttpHost("localhost"); //Creating an HttpHost object for target HttpHost targethost = new HttpHost("google.com"); //creating a RoutePlanner object HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost); //Setting the route planner to the HttpClientBuilder object HttpClientBuilder clientBuilder = HttpClients.custom(); clientBuilder = clientBuilder.setRoutePlanner(routePlanner); //Building a CloseableHttpClient CloseableHttpClient httpclient = clientBuilder.build(); //Creating an HttpGet object HttpGet httpget = new HttpGet("/"); //Executing the Get request HttpResponse httpresponse = httpclient.execute(targethost, httpget); //Printing the status line System.out.println(httpresponse.getStatusLine()); //Printing all the headers of the response Header[] headers = httpresponse.getAllHeaders(); for (int i = 0; i < headers.length; i++) { System.out.println(headers[i]); } //Printing the body of the response HttpEntity entity = httpresponse.getEntity(); if (entity != null) { System.out.println(EntityUtils.toString(entity)); } } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —