Apache HttpClient - Proxy Kullanımı
Bir Proxy sunucusu, istemci ile internet arasındaki bir aracı sunucudur. Proxy sunucuları aşağıdaki temel işlevleri sunar -
Güvenlik duvarı ve ağ veri filtreleme
Ağ bağlantısı paylaşımı
Veri önbelleğe alma
HttpClient kitaplığını kullanarak, bir proxy kullanarak bir HTTP isteği gönderebilirsiniz. Aşağıda verilen adımları izleyin -
Adım 1 - Bir HttpHost nesnesi oluşturun
Örnekleyin HttpHost sınıfı org.apache.http paketini, proxy ana bilgisayarının adını temsil eden bir dize parametresi (isteklerinizin gönderilmesini istediğiniz) yapıcısına ileterek.
//Creating an HttpHost object for proxy
HttpHost proxyHost = new HttpHost("localhost");
Aynı şekilde, isteklerin gönderilmesi gereken hedef ana bilgisayarı temsil edecek başka bir HttpHost nesnesi oluşturun.
//Creating an HttpHost object for target
HttpHost targetHost = new HttpHost("google.com");
Adım 2 - HttpRoutePlanner nesnesi oluşturun
HttpRoutePlannerarabirim, belirli bir ana bilgisayara bir yol hesaplar. Bu arayüzün bir nesnesini,DefaultProxyRoutePlannersınıf, bu arayüzün bir uygulaması. Yapıcısına bir parametre olarak, yukarıda oluşturulan proxy ana bilgisayarını iletin -
//creating a RoutePlanner object
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
Adım 3 - Rota planlayıcısını bir müşteri oluşturucuya ayarlayın
Kullanmak custom() yöntemi HttpClients sınıf oluştur HttpClientBuilder nesnesini kullanın ve bu nesne için yukarıda oluşturulan güzergah planlayıcısını setRoutePlanner() yöntem.
//Setting the route planner to the HttpClientBuilder object
HttpClientBuilder clientBuilder = HttpClients.custom();
clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
Adım 4 - CloseableHttpClient nesnesini oluşturun
İnşa et CloseableHttpClient nesneyi çağırarak build() yöntem.
//Building a CloseableHttpClient
CloseableHttpClient httpClient = clientBuilder.build();
Adım 5 - Bir HttpGetobject Oluşturun
Örneğini oluşturarak bir HTTP GET isteği oluşturun HttpGet sınıf.
//Creating an HttpGet object
HttpGet httpGet = new HttpGet("/");
Adım 6 - İsteği gerçekleştirin
Varyantlarından biri execute() yöntem kabul eder HttpHost ve HttpRequestnesneler ve isteği yürütür. Bu yöntemi kullanarak isteği gerçekleştirin -
//Executing the Get request
HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);
Misal
Aşağıdaki örnek, bir sunucuya proxy aracılığıyla bir HTTP isteğinin nasıl gönderileceğini gösterir. Bu örnekte, google.com'a localhost aracılığıyla bir HTTP GET isteği gönderiyoruz. Yanıtın başlıklarını ve yanıtın gövdesini yazdırdık.
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));
}
}
}
Çıktı
Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -
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>