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>