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>