Apache HttpClient - Menggunakan Proxy

Server proxy adalah server perantara antara klien dan internet. Server proxy menawarkan fungsi dasar berikut -

  • Pemfilteran data firewall dan jaringan

  • Berbagi koneksi jaringan

  • Caching data

Dengan menggunakan pustaka HttpClient, Anda dapat mengirim permintaan HTTP menggunakan proxy. Ikuti langkah-langkah yang diberikan di bawah ini -

Langkah 1 - Buat objek HttpHost

Instantiate HttpHost kelas dari org.apache.http paket dengan melewatkan parameter string yang mewakili nama host proxy, (dari mana Anda memerlukan permintaan untuk dikirim) ke konstruktornya.

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

Dengan cara yang sama, buat objek HttpHost lain untuk mewakili host target ke mana permintaan perlu dikirim.

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

Langkah 2 - Buat objek HttpRoutePlanner

Itu HttpRoutePlannerantarmuka menghitung rute ke host tertentu. Buat objek antarmuka ini dengan membuat instanceDefaultProxyRoutePlannerkelas, implementasi antarmuka ini. Sebagai parameter untuk konstruktornya, berikan host proxy yang dibuat di atas -

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

Langkah 3 - Tetapkan perencana rute ke pembuat klien

Menggunakan custom() metode dari HttpClients kelas, buat HttpClientBuilder objek dan, untuk objek ini atur perencana rute yang dibuat di atas, menggunakan setRoutePlanner() metode.

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

clientBuilder = clientBuilder.setRoutePlanner(routePlanner);

Langkah 4 - Bangun objek CloseableHttpClient

Bangun CloseableHttpClient objek dengan memanggil build() metode.

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

Langkah 5 - Buat HttpGetobject

Buat permintaan HTTP GET dengan membuat instance HttpGet kelas.

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

Langkah 6 - Jalankan permintaan

Salah satu varian dari execute() metode menerima HttpHost dan HttpRequestobjek dan menjalankan permintaan. Jalankan permintaan menggunakan metode ini -

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

Contoh

Contoh berikut menunjukkan cara mengirim permintaan HTTP ke server melalui proxy. Dalam contoh ini, kami mengirimkan permintaan HTTP GET ke google.com melalui localhost. Kami telah mencetak header tanggapan dan isi tanggapan.

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

Keluaran

Saat menjalankan, program di atas menghasilkan output berikut -

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>