Apache HttpClient - Verwenden von Proxy

Ein Proxyserver ist ein Vermittlungsserver zwischen dem Client und dem Internet. Proxyserver bieten die folgenden grundlegenden Funktionen:

  • Filterung von Firewall- und Netzwerkdaten

  • Netzwerkverbindungsfreigabe

  • Daten-Caching

Mit der HttpClient-Bibliothek können Sie eine HTTP-Anfrage über einen Proxy senden. Befolgen Sie die unten angegebenen Schritte -

Schritt 1 - Erstellen Sie ein HttpHost-Objekt

Instanziieren Sie die HttpHost Klasse der org.apache.http Paket durch Übergeben eines Zeichenfolgenparameters, der den Namen des Proxy-Hosts darstellt (von dem die Anforderungen gesendet werden müssen), an seinen Konstruktor.

//Creating an HttpHost object for proxy
HttpHost proxyHost = new HttpHost("localhost");

Erstellen Sie auf die gleiche Weise ein weiteres HttpHost-Objekt, um den Zielhost darzustellen, an den Anforderungen gesendet werden müssen.

//Creating an HttpHost object for target
HttpHost targetHost = new HttpHost("google.com");

Schritt 2 - Erstellen Sie ein HttpRoutePlanner-Objekt

Das HttpRoutePlannerSchnittstelle berechnet eine Route zu einem angegebenen Host. Erstellen Sie ein Objekt dieser Schnittstelle, indem Sie das instanziierenDefaultProxyRoutePlannerKlasse, eine Implementierung dieser Schnittstelle. Übergeben Sie als Parameter an den Konstruktor den oben erstellten Proxy-Host -

//creating a RoutePlanner object
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);

Schritt 3 - Stellen Sie den Routenplaner auf einen Client Builder ein

Verwendung der custom() Methode der HttpClients Klasse, erstellen Sie eine HttpClientBuilder Objekt und setzen Sie auf dieses Objekt den oben erstellten Routenplaner mit dem setRoutePlanner() Methode.

//Setting the route planner to the HttpClientBuilder object
HttpClientBuilder clientBuilder = HttpClients.custom();

clientBuilder = clientBuilder.setRoutePlanner(routePlanner);

Schritt 4 - Erstellen Sie das CloseableHttpClient-Objekt

Bauen Sie die CloseableHttpClient Objekt durch Aufrufen der build() Methode.

//Building a CloseableHttpClient
CloseableHttpClient httpClient = clientBuilder.build();

Schritt 5 - Erstellen Sie ein HttpGetobject

Erstellen Sie eine HTTP-GET-Anforderung, indem Sie die instanziieren HttpGet Klasse.

//Creating an HttpGet object
HttpGet httpGet = new HttpGet("/");

Schritt 6 - Führen Sie die Anforderung aus

Eine der Varianten der execute() Methode akzeptiert eine HttpHost und HttpRequestObjekte und führt die Anfrage aus. Führen Sie die Anforderung mit dieser Methode aus -

//Executing the Get request
HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);

Beispiel

Das folgende Beispiel zeigt, wie eine HTTP-Anforderung über einen Proxy an einen Server gesendet wird. In diesem Beispiel senden wir eine HTTP-GET-Anfrage über localhost an google.com. Wir haben die Überschriften der Antwort und den Text der Antwort gedruckt.

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));
      }
   }
}

Ausgabe

Bei der Ausführung generiert das obige Programm die folgende Ausgabe:

HTTP/1.1 200 OK
Date: Sun, 23 Dec 2018 10:21:47 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.13
Last-Modified: Tue, 24 Jun 2014 10:46:24 GMT
ETag: "2e-4fc92abc3c000"
Accept-Ranges: bytes
Content-Length: 46
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>