Apache HttpClient - Hızlı Kılavuz

Köprü Metni Aktarım Protokolü (HTTP), dağıtılmış, işbirliğine dayalı, hiper ortam bilgi sistemleri için uygulama düzeyinde bir protokoldür. Bu, 1990'dan beri World Wide Web (yani İnternet) için veri iletişiminin temelidir. HTTP, diğer amaçların yanı sıra istek yöntemlerinin uzantılarını, hata kodlarını ve başlıklarını kullanarak kullanılabilen genel ve durumsuz bir protokoldür.

Temel olarak HTTP, World Wide Web'de veri (HTML dosyaları, görüntü dosyaları, sorgu sonuçları, vb.) Sunmak için kullanılan TCP / IP tabanlı bir iletişim protokolüdür. Varsayılan bağlantı noktası TCP 80'dir, ancak diğer bağlantı noktaları da kullanılabilir. Bilgisayarların birbirleriyle iletişim kurması için standart bir yol sağlar. HTTP belirtimi, istemcilerin istek verilerinin nasıl oluşturulacağını ve sunucuya nasıl gönderileceğini ve sunucuların bu isteklere nasıl yanıt vereceğini tanımlar.

Http İstemcisi nedir

Http istemcisi bir transfer kitaplığıdır, istemci tarafında bulunur, HTTP mesajları gönderir ve alır. En son HTTP standartlarını karşılayan güncel, zengin özelliklere sahip ve verimli uygulama sağlar.

İstemci kitaplığını kullanarak buna ek olarak, web tarayıcıları, web hizmeti istemcileri vb. Gibi HTTP tabanlı uygulamalar da oluşturulabilir.

Http İstemcisinin Özellikleri

Http istemcisinin öne çıkan özellikleri aşağıdadır -

  • HttpClient kitaplığı, mevcut tüm HTTP yöntemlerini uygular.

  • HttpClient kitaplığı, Secure Socket Layer protokolünü kullanarak istekleri güvence altına almak için API'ler sağlar.

  • HttpClient kullanarak, proxyler kullanarak bağlantılar kurabilirsiniz.

  • Temel, Özet, NTLMv1, NTLMv2, NTLM2 Oturumu vb. Gibi kimlik doğrulama şemalarını kullanarak bağlantıların kimliğini doğrulayabilirsiniz.

  • HttpClient kitaplığı, birden çok iş parçacığı üzerinden istek göndermeyi destekler. Kullanarak çeşitli iş parçacıklarıyla kurulan birden fazla bağlantıyı yönetirClientConnectionPoolManager.

  • Apache HttpClient kitaplığını kullanarak bağlantı zaman aşımlarını ayarlayabilirsiniz.

Bu bölümde, Eclipse IDE'de HttpClient için bir ortamın nasıl ayarlanacağını açıklayacağız. Kuruluma devam etmeden önce, sisteminizde Eclipse'in zaten kurulu olduğundan emin olun. Değilse, Eclipse'i indirip yükleyin.

Eclipse hakkında daha fazla bilgi için lütfen Eclipse Eğitimimize bakın .

Adım 1 - Bağımlılık JAR dosyasını indirin

HttpClient (bileşenler) web sitesinin resmi ana sayfasını açın ve indirme sayfasına gidin

Ardından, en son kararlı sürümünü indirin HttpClient. Burada, eğitim boyunca 4.5.6 sürümünü kullanıyoruz, dolayısıyla dosyayı indirin4.5.6.zip.

İndirilen klasörün içinde, adlı bir klasör bulacaksınız. lib ve bu, HttpClient ile çalışmak için projenizin sınıf yoluna eklenecek gerekli Jar dosyalarını içerir.

Adım 2 - Bir proje oluşturun ve derleme yolunu ayarlayın

Tutulmayı açın ve örnek bir proje oluşturun. Projeye sağ tıklayın seçeneği seçinBuild Path → Configure Build Path Aşağıda gösterildiği gibi.

İçinde Java Build Path çerçeve içinde Libraries sekmesine tıklayın Add External JARs.

Ve lib klasöründeki tüm jar dosyalarını seçin ve Apply and Close.

Eclipse'de HttpClient kitaplığıyla çalışmaya hazırsınız.

GET yöntemi, belirli bir URI kullanarak belirli bir sunucudan bilgi almak için kullanılır. GET kullanan istekler yalnızca verileri almalı ve veriler üzerinde başka bir etkisi olmamalıdır.

HttpClient API, HttpGet bu, alma isteği yöntemini temsil eder.

HttpClient kitaplığını kullanarak bir alma isteği göndermek için aşağıdaki adımları izleyin.

Adım 1 - HttpClient nesnesi oluşturun

createDefault() yöntemi HttpClients sınıf bir CloseableHttpClient nesnenin temel uygulaması olan HttpClient arayüz.

Bu yöntemi kullanarak, aşağıda gösterildiği gibi bir HttpClient nesnesi oluşturun -

CloseableHttpClient httpclient = HttpClients.createDefault();

Adım 2 - HttpGet Nesnesi Oluşturun

HttpGet sınıfı, belirli bir sunucunun bilgilerini bir URI kullanarak alan HTTPGET isteğini temsil eder.

Bu sınıfın örneğini oluşturarak bir HTTP GET isteği oluşturun. Bu sınıfın yapıcısı, URI'yi temsil eden bir String değerini kabul eder.

HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

Adım 3 - Alma İsteğini Uygulayın

execute() yöntemi CloseableHttpClient sınıfı bir HttpUriRequest (arabirim) nesnesini (yani HttpGet, HttpPost, HttpPut, HttpHead vb.) kabul eder ve bir yanıt nesnesi döndürür.

İsteği aşağıda gösterildiği gibi bu yöntemi kullanarak gerçekleştirin -

HttpResponse httpresponse = httpclient.execute(httpget);

Misal

Aşağıda, HTTP GET isteğinin HttpClient kitaplığı kullanılarak yürütülmesini gösteren bir örnek verilmiştir.

import java.util.Scanner;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpGetExample {
 
   public static void main(String args[]) throws Exception{
 
      //Creating a HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //Creating a HttpGet object
      HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");

      //Printing the method used
      System.out.println("Request Type: "+httpget.getMethod());

      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httpget);

      Scanner sc = new Scanner(httpresponse.getEntity().getContent());

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
      while(sc.hasNext()) {
         System.out.println(sc.nextLine());
      }
   }
}

Çıktı

Yukarıdaki program aşağıdaki çıktıyı üretir -

Request Type: GET
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java
i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible,
LOLCODE, Current Affairs 2018, Apache Commons Collections</title>
<meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML,
Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common
CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache
Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC),
Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/>
<meta name = "Keywords" content = "Python Data Science, Java i18n, GitLab,
TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson,
TestLink, Inter Process Communication (IPC), Logo"/>
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href="/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
</script>
</body>
</html>

Sunucuya veri göndermek için bir POST isteği kullanılır; örneğin müşteri bilgileri, dosya yükleme, vb. HTML formları kullanılarak.

HttpClient API, HttpPost POST isteğini temsil eder.

HttpClient kitaplığını kullanarak bir HTTP POST isteği göndermek için aşağıda verilen adımları izleyin.

Adım 1 - HttpClient Nesnesi Oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, temel uygulaması olan HttpClient arayüz.

Bu yöntemi kullanarak bir HttpClient nesnesi oluşturun.

CloseableHttpClient httpClient = HttpClients.createDefault();

Adım 2 - HttpPost Nesnesi Oluşturun

HttpPost sınıf temsil eder HTTP POSTistek. Bu, gerekli verileri gönderir ve verilen sunucunun bilgilerini bir URI kullanarak alır.

Örneğini oluşturarak bu isteği oluşturun HttpPost sınıf ve URI'yi temsil eden bir dize değerini, yapıcısına bir parametre olarak iletir.

HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");

Adım 3 - Alma İsteğini Uygulayın

execute() CloseableHttpClient nesnesinin yöntemi bir HttpUriRequest (arabirim) nesnesini (yani HttpGet, HttpPost, HttpPut, HttpHead vb.) kabul eder ve bir yanıt nesnesi döndürür.

HttpResponse httpResponse = httpclient.execute(httpget);

Misal

Aşağıda, HTTP POST isteğinin HttpClient kitaplığı kullanılarak yürütülmesini gösteren bir örnek verilmiştir.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpPostExample {
 
   public static void main(String args[]) throws Exception{
 
      //Creating a HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //Creating a HttpGet object
      HttpPost httppost = new HttpPost("https://www.tutorialspoint.com/");

      //Printing the method used
      System.out.println("Request Type: "+httppost.getMethod());

      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httppost);

      Scanner sc = new Scanner(httpresponse.getEntity().getContent());

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
      while(sc.hasNext()) {
         System.out.println(sc.nextLine());
      }
   }
}

Çıktı

Yukarıdaki program aşağıdaki çıktıyı üretir.

Request Type: POST
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--> 
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java
i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible,
LOLCODE, Current Affairs 2018, Apache Commons Collections</title>
<meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML,
Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common
CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache
Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC),
Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/>
<meta name = "Keywords" content="Python Data Science, Java i18n, GitLab,
TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson,
TestLink, Inter Process Communication (IPC), Logo"/>
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" conten t= "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
</script>
</body>
</html>

HTTP yanıtlarının yanıt işleyicileri kullanılarak işlenmesi önerilir. Bu bölümde, yanıt işleyicilerinin nasıl oluşturulacağını ve bir yanıtı işlemek için nasıl kullanılacağını tartışacağız.

Yanıt işleyiciyi kullanırsanız, tüm HTTP bağlantıları otomatik olarak serbest bırakılacaktır.

Bir yanıt işleyici oluşturma

HttpClient API, şu adıyla bilinen bir arabirim sağlar: ResponseHandler paketin içinde org.apache.http.client. Bir yanıt işleyici oluşturmak için, bu arabirimi uygulayın ve onun handleResponse() yöntem.

Her yanıtın bir durum kodu vardır ve durum kodu 200 ile 300 arasındaysa, bu, eylemin başarıyla alındığı, anlaşıldığı ve kabul edildiği anlamına gelir. Bu nedenle, örneğimizde, yanıtların varlıklarını bu tür durum kodlarıyla ele alacağız.

Yanıt işleyiciyi kullanarak isteği yürütmek

Bir yanıt işleyici kullanarak isteği yürütmek için aşağıda verilen adımları izleyin.

Adım 1 - HttpClient Nesnesi Oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, temel uygulaması olan HttpClientarayüz. Bu yöntemi kullanarak bir HttpClient nesnesi oluşturun

CloseableHttpClient httpclient = HttpClients.createDefault();

Adım 2 - Yanıt İşleyiciyi örnekleyin

Aşağıdaki kod satırını kullanarak yukarıda oluşturulan yanıt işleyici nesnesini örnekleyin -

ResponseHandler<String> responseHandler = new MyResponseHandler();

Adım 3 - HttpGet Nesnesi Oluşturun

HttpGet sınıfı, belirli bir sunucunun bilgilerini bir URI kullanarak alan HTTP GET isteğini temsil eder.

HttpGet sınıfını başlatarak ve oluşturucusuna bir parametre olarak URI'yi temsil eden bir dizeyi ileterek bir HttpGet isteği oluşturun.

ResponseHandler<String> responseHandler = new MyResponseHandler();

Adım 4 - Yanıt işleyicisini kullanarak Alma isteğini yürütün

CloseableHttpClient sınıfın bir çeşidi vardır execute() iki nesneyi kabul eden yöntem ResponseHandler ve HttpUriRequest ve bir yanıt nesnesi döndürür.

String httpResponse = httpclient.execute(httpget, responseHandler);

Misal

Aşağıdaki örnek, yanıt işleyicilerinin kullanımını göstermektedir.

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

class MyResponseHandler implements ResponseHandler<String>{
 
   public String handleResponse(final HttpResponse response) throws IOException{

      //Get the status of the response
      int status = response.getStatusLine().getStatusCode();
      if (status >= 200 && status < 300) {
         HttpEntity entity = response.getEntity();
         if(entity == null) {
            return "";
         } else {
            return EntityUtils.toString(entity);
         }

      } else {
         return ""+status;
      }
   }
}

public class ResponseHandlerExample {
   
   public static void main(String args[]) throws Exception{
 
      //Create an HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //instantiate the response handler
      ResponseHandler<String> responseHandler = new MyResponseHandler();

      //Create an HttpGet object
      HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

      //Execute the Get request by passing the response handler object and HttpGet object
      String httpresponse = httpclient.execute(httpget, responseHandler);

      System.out.println(httpresponse);
   }
}

Çıktı

Yukarıdaki programlar aşağıdaki çıktıyı üretir -

<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>

HTTP yanıtlarını bir yanıt işleyici kullanmak yerine manuel olarak işliyorsanız, tüm http bağlantılarını kendiniz kapatmanız gerekir. Bu bölüm, bağlantıların manuel olarak nasıl kapatılacağını açıklar.

HTTP bağlantılarını manuel olarak kapatırken aşağıda verilen adımları izleyin -

Adım 1 - HttpClient nesnesi oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, HttpClient arabiriminin temel uygulamasıdır.

Bu yöntemi kullanarak bir HttpClient aşağıda gösterildiği gibi nesne -

CloseableHttpClient httpClient = HttpClients.createDefault();

Adım 2 - Sonunda deneme bloğu başlatın

Bir dene-son bloğu başlatın, kalan kodu deneme bloğundaki programlara yazın ve Final bloğundaki CloseableHttpClient nesnesini kapatın.

CloseableHttpClient httpClient = HttpClients.createDefault();
try{
   //Remaining code . . . . . . . . . . . . . . .
}finally{
   httpClient.close();
}

Adım 3 - Bir HttpGetobject Oluşturun

HttpGet sınıfı, belirli bir sunucunun bilgilerini bir URI kullanarak alan HTTP GET isteğini temsil eder.

URI'yi temsil eden bir dize ileterek HttpGet sınıfını başlatarak bir HTTP GET isteği oluşturun.

HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");

Adım 4 - Alma isteğini yürütün

execute() yöntemi CloseableHttpClient nesne kabul eder HttpUriRequest (arabirim) nesnesi (yani HttpGet, HttpPost, HttpPut, HttpHead vb.) ve bir yanıt nesnesi döndürür.

Verilen yöntemi kullanarak isteği gerçekleştirin -

HttpResponse httpResponse = httpclient.execute(httpGet);

Adım 5 - Sonunda başka bir (iç içe geçmiş) deneyin

Başka bir dene-son bloğu başlatın (önceki deneme bloğunun içine yerleştirilmiş), kalan kodu programlarda bu try bloğuna yazın ve final bloğundaki HttpResponse nesnesini kapatın.

CloseableHttpClient httpclient = HttpClients.createDefault();
try{
   . . . . . . .
   . . . . . . .
   CloseableHttpResponse httpresponse = httpclient.execute(httpget);
   try{
      . . . . . . .
      . . . . . . .
   }finally{
      httpresponse.close();
   }
}finally{
   httpclient.close();
}

Misal

İstek, yanıt akışı vb. Nesneler oluşturduğunuzda / edindiğinizde, sonraki satırda bir dene son bloğu başlatın, kalan kodu try içinde yazın ve aşağıdaki programda gösterildiği gibi final bloğundaki ilgili nesneyi kapatın -

import java.util.Scanner;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class CloseConnectionExample {
   
   public static void main(String args[])throws Exception{
 
      //Create an HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      try{
         //Create an HttpGet object
         HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

         //Execute the Get request
         CloseableHttpResponse httpresponse = httpclient.execute(httpget);

         try{
            Scanner sc = new Scanner(httpresponse.getEntity().getContent());
            while(sc.hasNext()) {
               System.out.println(sc.nextLine());
            }
         }finally{
            httpresponse.close();
         }
      }finally{
         httpclient.close();
      }
   }
}

Çıktı

Yukarıdaki programı çalıştırırken aşağıdaki çıktı üretilir -

<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>
</html>

Şunu kullanarak mevcut HTTP isteğini iptal edebilirsiniz. abort() yöntem, yani, bu yöntemi çağırdıktan sonra, belirli bir istek üzerine çalıştırılması iptal edilecektir.

Bu yöntem bir yürütmeden sonra çağrılırsa, bu yürütmenin yanıtları etkilenmeyecek ve sonraki yürütmeler iptal edilecektir.

Misal

Aşağıdaki örneği gözlemlerseniz, bir HttpGet isteği oluşturduk, kullanılan istek biçimini yazdırdık. getMethod().

Daha sonra aynı istekle başka bir infaz gerçekleştirdik. 1 kullanılarak durum satırı Baskılı st tekrar yürütme. Son olarak, ikinci yürütmenin durum satırını yazdırdı.

Tartışıldığı gibi, 1 cevapları st yürütme (iptal yöntemi önceki yürütme) ve, iptal yöntemi sonra mevcut isteğe tüm sonraki infaz bir yürütmesini başarısız olan (ikinci durum iptal yöntemi sonra yazılır hattı dahil olmak üzere) basılır istisna.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpGetExample {
   public static void main(String args[]) throws Exception{
   
      //Creating an HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //Creating an HttpGet object
      HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

      //Printing the method used
      System.out.println(httpget.getMethod());
 
      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httpget);

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());

      httpget.abort();
      System.out.println(httpresponse.getEntity().getContentLength());
 
      //Executing the Get request
      HttpResponse httpresponse2 = httpclient.execute(httpget);
      System.out.println(httpresponse2.getStatusLine());
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

On executing, the above program generates the following output.
GET
HTTP/1.1 200 OK
-1
Exception in thread "main" org.apache.http.impl.execchain.RequestAbortedException:
Request aborted
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:180)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at HttpGetExample.main(HttpGetExample.java:32)

Önleyiciler, istekleri veya yanıtları engellemeye veya değiştirmeye yardımcı olanlardır. Protokol engelleyicileri genel olarak belirli bir başlık veya ilgili bir grup başlık üzerinde hareket eder. HttpClient kitaplığı, engelleyiciler için destek sağlar.

Önleyen isteyin

HttpRequestInterceptorarabirim, istek önleyicilerini temsil eder. Bu arabirim, istekleri engellemek için kod yığınını yazmanız gereken işlem olarak bilinen bir yöntem içerir.

İstemci tarafında, bu yöntem istekleri sunucuya göndermeden önce doğrular / işler ve sunucu tarafında bu yöntem, isteğin gövdesini değerlendirmeden önce yürütülür.

İstek önleyicisi oluşturma

Aşağıda verilen adımları izleyerek bir istek durdurucu oluşturabilirsiniz.

Step 1 - Create an object of HttpRequestInterceptor

Soyut yöntem sürecini uygulayarak HttpRequestInterceptor arabiriminin bir nesnesini oluşturun.

HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
 public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
   //Method implementation . . . . .
};

Step 2 - Instantiate CloseableHttpClient object

Bir özel oluşturun CloseableHttpClient aşağıda gösterildiği gibi yukarıda oluşturulan durdurucu ekleyerek nesneyi -

//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();

Bu nesneyi kullanarak, isteği yürütme işlemlerini her zamanki gibi gerçekleştirebilirsiniz.

Misal

Aşağıdaki örnek, istek yakalayıcılarının kullanımını göstermektedir. Bu örnekte, bir HTTP GET istek nesnesi oluşturduk ve buna üç başlık ekledik: sample-header, demoheader ve test-header.

İçinde processor()durduranın yöntemi, gönderilen talebin başlıklarını doğruluyoruz; bu başlıklardan herhangi biri isesample-header, onu kaldırmaya ve söz konusu isteğin başlıklarının listesini görüntülemeye çalışıyoruz.

import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HttpContext;

public class InterceptorsExample {
 
   public static void main(String args[]) throws Exception{
      
      //Creating an HttpRequestInterceptor
      HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
         @Override
         public void process(HttpRequest request, HttpContext context) throws
         HttpException, IOException {
            if(request.containsHeader("sample-header")) {
               System.out.println("Contains header sample-header, removing it..");
               request.removeHeaders("sample-header"); 
            }
            //Printing remaining list of headers
            Header[] headers= request.getAllHeaders();
            for (int i = 0; i<headers.length;i++) {
               System.out.println(headers[i].getName());
            }
         }
      };

      //Creating a CloseableHttpClient object
      CloseableHttpClient httpclient =
      HttpClients.custom().addInterceptorFirst(requestInterceptor).build();

      //Creating a request object
      HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");

      //Setting the header to it
      httpget1.setHeader(new BasicHeader("sample-header","My first header"));
      httpget1.setHeader(new BasicHeader("demo-header","My second header"));
      httpget1.setHeader(new BasicHeader("test-header","My third header"));

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httpget1);

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
   }
}

Çıktı

Yukarıdaki programı çalıştırırken aşağıdaki çıktı üretilir -

Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK

Müdahale engelleyici

HttpResponseInterceptorarabirim, yanıt engelleyicileri temsil eder. Bu arayüz olarak bilinen bir yöntem içerirprocess(). Bu yöntemde, yanıtları kesmek için kod yığınını yazmanız gerekir.

Sunucu tarafında, bu yöntem yanıtı istemciye göndermeden önce doğrular / işler ve istemci tarafında bu yöntem yanıtın gövdesini değerlendirmeden önce yürütülür.

Yanıt engelleyici oluşturma

Aşağıda verilen adımları izleyerek bir yanıt yakalayıcı oluşturabilirsiniz -

Step 1 - Create an object of HttpResponseInterceptor

Bir nesneyi oluşturun HttpResponseInterceptor soyut yöntemini uygulayarak arayüz process.

HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
   @Override
   public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
      //Method implementation . . . . . . . .
   }
};

Adım 2: CloseableHttpClient nesnesinin örneğini oluşturun

Bir özel oluşturun CloseableHttpClient aşağıda gösterildiği gibi, yukarıda oluşturulan durdurucu ekleyerek nesneyi -

//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();

Bu nesneyi kullanarak, isteği yürütme işlemlerini her zamanki gibi gerçekleştirebilirsiniz.

Misal

Aşağıdaki örnek, yanıt kesicilerinin kullanımını gösterir. Bu örnekte, işlemcideki yanıta üç başlık ekledik: örnek başlık, demo başlık ve test başlığı.

Talebi yerine getirip yanıtı aldıktan sonra, yanıtın tüm başlıklarının adlarını getAllHeaders() yöntem.

Ve çıktıda, listedeki üç başlığın adını görebilirsiniz.

import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.HttpContext;

public class ResponseInterceptorsExample {

   public static void main(String args[]) throws Exception{
      
      //Creating an HttpRequestInterceptor
      HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
         @Override
         public void process(HttpResponse response, HttpContext context) throws
         HttpException, IOException {
            System.out.println("Adding header sample_header, demo-header, test_header to the response");
            response.setHeader("sample-header", "My first header");
            response.setHeader("demo-header", "My second header");
            response.setHeader("test-header", "My third header"); 
         }
      };

      //Creating a CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(responseInterceptor).build();

      //Creating a request object
      HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httpget1); 

      //Printing remaining list of headers
      Header[] headers = httpresponse.getAllHeaders();
 
      for (int i = 0; i<headers.length;i++) {
         System.out.println(headers[i].getName());
      }
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki sonucu verir -

On executing the above program generates the following output.
Adding header sample_header, demo-header, test_header to the response
Accept-Ranges
Access-Control-Allow-Headers
Access-Control-Allow-Origin
Cache-Control
Content-Type
Date
Expires
Last-Modified
Server
Vary
X-Cache
sample-header
demo-header
test-header

HttpClient kullanarak, kullanıcı adı ve şifre gerektiren bir web sitesine bağlanabilirsiniz. Bu bölümde, kullanıcı adı ve parola isteyen bir siteye karşı bir istemci talebinin nasıl yürütüleceği açıklanmaktadır.

Adım 1 - Bir CredentialsProvider nesnesi oluşturun

CredentialsProviderArayüz, kullanıcı oturum açma kimlik bilgilerini tutmak için bir koleksiyon tutar. Örneğini oluşturarak nesnesini oluşturabilirsiniz.BasicCredentialsProvider sınıfı, bu arabirimin varsayılan uygulaması.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Adım 2 - Kimlik Bilgilerini Ayarlayın

CredentialsProvider nesnesine gerekli kimlik bilgilerini şu komutu kullanarak ayarlayabilirsiniz: setCredentials() yöntem.

Bu yöntem, aşağıda belirtildiği gibi iki nesneyi kabul eder -

  • AuthScope object - Ana bilgisayar adı, bağlantı noktası numarası ve kimlik doğrulama düzeni adı gibi ayrıntıları belirten kimlik doğrulama kapsamı.

  • Credentials object - Kimlik bilgilerini (kullanıcı adı, şifre) belirtme.

Kimlik bilgilerini kullanarak ayarlayın setCredentials() aşağıda gösterildiği gibi hem ana bilgisayar hem de proxy için yöntem -

credsProvider.setCredentials(new AuthScope("example.com", 80), 
   new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), 
   new UsernamePasswordCredentials("abc", "passwd"));

Adım 3 - HttpClientBuilder Nesnesi Oluşturun

Oluşturmak HttpClientBuilder kullanmak custom() yöntemi HttpClients sınıf.

//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

Adım 4 - Kimlik bilgilerini ayarlayın

Yukarıda oluşturulan credentialsPovider nesnesini bir HttpClientBuilder olarak ayarlayabilirsiniz. setDefaultCredentialsProvider() yöntem.

Önceki adımda oluşturulan CredentialProvider nesnesini istemci oluşturucuya ayarlayın. CredentialsProvider object() yöntemi aşağıda gösterildiği gibi.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Adım 5 - CloseableHttpClient Oluşturun

İnşa et CloseableHttpClient kullanarak nesne build() yöntemi HttpClientBuilder sınıf.

CloseableHttpClient httpclient = clientbuilder.build()

Adım 6 - Bir HttpGet nesnesi oluşturun ve çalıştırın

HttpGet sınıfını başlatarak bir HttpRequest nesnesi oluşturun. Bu isteği kullanarak gerçekleştirinexecute() yöntem.

//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");

//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);

Misal

Aşağıda, kullanıcı kimlik doğrulaması gerektiren bir hedef siteye karşı bir HTTP isteğinin yürütülmesini gösteren örnek bir program yer almaktadır.

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class UserAuthenticationExample {
   
   public static void main(String args[]) throws Exception{
      
      //Create an object of credentialsProvider
      CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

      //Set the credentials
      AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80);
      
      Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD");
      credentialsPovider.setCredentials(scope,credentials);

      //Creating the HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the credentials
      clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider);

      //Building the CloseableHttpClient object
      CloseableHttpClient httpclient = clientbuilder.build();

      //Creating a HttpGet object
      HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php");

      //Printing the method used
      System.out.println(httpget.getMethod()); 

      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httpget);

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
      int statusCode = httpresponse.getStatusLine().getStatusCode();
      System.out.println(statusCode);

      Header[] headers= httpresponse.getAllHeaders();
      for (int i = 0; i<headers.length;i++) {
         System.out.println(headers[i].getName());
      }
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir.

GET
HTTP/1.1 200 OK
200

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>

Bu bölümde, kullanıcı adı ve parola kullanılarak kimliği doğrulanmış bir HttpRequest'i nasıl oluşturacağımızı ve bir örnek kullanarak bunu bir proxy aracılığıyla bir hedef ana bilgisayara tünelleyeceğimizi öğreneceğiz.

Adım 1 - Bir CredentialsProvider nesnesi oluşturun

CredentialsProvider Arabirimi, kullanıcı oturum açma kimlik bilgilerini tutmak için bir koleksiyon tutar. Bu arabirimin varsayılan uygulaması olan BasicCredentialsProvider sınıfını başlatarak nesnesini oluşturabilirsiniz.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Adım 2 - Kimlik bilgilerini ayarlayın

CredentialsProvider nesnesine gerekli kimlik bilgilerini şu komutu kullanarak ayarlayabilirsiniz: setCredentials()yöntem. Bu yöntem iki nesneyi kabul eder -

  • AuthScope object - Ana bilgisayar adı, bağlantı noktası numarası ve kimlik doğrulama düzeni adı gibi ayrıntıları belirten kimlik doğrulama kapsamı.

  • Credentials object- Kimlik bilgilerini (kullanıcı adı, şifre) belirtme. Kimlik bilgilerini kullanarak ayarlayınsetCredentials() aşağıda gösterildiği gibi hem ana bilgisayar hem de proxy için yöntem.

credsProvider.setCredentials(new AuthScope("example.com", 80), new
   UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
   UsernamePasswordCredentials("abc", "passwd"));

Adım 3 - HttpClientBuilder nesnesi oluşturun

Oluşturmak HttpClientBuilder kullanmak custom() yöntemi HttpClients aşağıda gösterildiği gibi sınıf -

//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

Adım 4 - CredentialsProvider'ı ayarlayın

CredentialsProvider nesnesini bir HttpClientBuilder nesnesine ayarlamak için setDefaultCredentialsProvider()yöntem. Önceden oluşturulmuşCredentialsProvider bu yönteme itiraz edin.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Adım 5 - CloseableHttpClient Oluşturun

İnşa et CloseableHttpClient kullanarak nesne build() yöntem.

CloseableHttpClient httpclient = clientbuilder.build();

Adım 6 - Proxy ve hedef ana bilgisayarları oluşturun

Hedef ve proxy ana bilgisayarlarını oluşturun. HttpHost sınıf.

//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");

Adım 7 - Proxy'yi ayarlayın ve bir RequestConfig nesnesi oluşturun

Oluşturmak RequestConfig.Builder kullanarak nesne custom()yöntem. Önceden oluşturulan proxyHost nesnesiniRequestConfig.Builder kullanmak setProxy()yöntem. Son olarak,RequestConfig kullanarak nesne build() yöntem.

RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();

Adım 8 - Bir HttpGet istek nesnesi oluşturun ve buna yapılandırma nesnesi ayarlayın.

Oluşturmak HttpGetHttpGet sınıfını başlatarak nesne. Önceki adımda oluşturulan yapılandırma nesnesini bu nesneye ayarlayın.setConfig() yöntem.

//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");

//Setting the config to the request
httpget.setConfig(config);

Adım 9 - İsteği gerçekleştirin

HttpHost nesnesini (hedef) ve isteği (HttpGet) parametre olarak ileterek isteği yürütün. execute() yöntem.

HttpResponse httpResponse = httpclient.execute(targetHost, httpget);

Misal

Aşağıdaki örnek, kullanıcı adı ve parola kullanarak bir proxy aracılığıyla HTTP isteğinin nasıl yürütüleceğini gösterir.

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class ProxyAuthenticationExample {
   public static void main(String[] args) throws Exception {

      //Creating the CredentialsProvider object
      CredentialsProvider credsProvider = new BasicCredentialsProvider();

      //Setting the credentials
      credsProvider.setCredentials(new AuthScope("example.com", 80), 
         new UsernamePasswordCredentials("user", "mypass"));
      credsProvider.setCredentials(new AuthScope("localhost", 8000), 
         new UsernamePasswordCredentials("abc", "passwd"));

      //Creating the HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the credentials
      clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
      
      //Building the CloseableHttpClient object
      CloseableHttpClient httpclient = clientbuilder.build();


      //Create the target and proxy hosts
      HttpHost targetHost = new HttpHost("example.com", 80, "http");
      HttpHost proxyHost = new HttpHost("localhost", 8000, "http");

      //Setting the proxy
      RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
      reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
      RequestConfig config = reqconfigconbuilder.build();

      //Create the HttpGet request object
      HttpGet httpget = new HttpGet("/");

      //Setting the config to the request
      httpget.setConfig(config);
 
      //Printing the status line
      HttpResponse response = httpclient.execute(targetHost, httpget);
      System.out.println(response.getStatusLine());

   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

HTTP/1.1 200 OK

HttpClient kitaplığını kullanarak bir istek gönderebilir veya parametreleri ileterek bir forma giriş yapabilirsiniz.

Bir forma giriş yapmak için aşağıda verilen adımları izleyin.

Adım 1 - HttpClient nesnesi oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, HttpClient arabiriminin temel uygulamasıdır. Bu yöntemi kullanarak bir HttpClient nesnesi oluşturun -

CloseableHttpClient httpClient = HttpClients.createDefault();

Adım 2 - Bir RequestBuilder nesnesi oluşturun

Sınıf RequestBuilderona parametreler ekleyerek istek oluşturmak için kullanılır. İstek türü PUT veya POST ise parametreleri isteğe URL kodlu varlık olarak ekler.

Post () yöntemini kullanarak bir RequestBuilder nesnesi (POST türü) oluşturun.

//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();

Adım 3 - Uri ve parametreleri RequestBuilder'a ayarlayın.

URI ve parametreleri kullanarak RequestBuilder nesnesini ayarlayın. setUri() ve addParameter() RequestBuilder sınıfının yöntemleri.

//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");

Adım 4 - HttpUriRequest nesnesini oluşturun

Gerekli parametreleri ayarladıktan sonra, HttpUriRequest kullanarak nesne build() yöntem.

//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();

Adım 5 - İsteği gerçekleştirin

CloseableHttpClient nesnesinin yürütme yöntemi, bir HttpUriRequest (arabirim) nesnesini (yani HttpGet, HttpPost, HttpPut, HttpHead vb.) Kabul eder ve bir yanıt nesnesi döndürür.

Önceki adımlarda oluşturulan HttpUriRequest öğesini, execute() yöntem.

//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);

Misal

Aşağıdaki örnek, oturum açma kimlik bilgilerini göndererek bir formda nasıl oturum açılacağını gösterir. Burada iki parametre gönderdik -username and password bir forma girip mesaj varlığını ve isteğin durumunu yazdırmayı denedi.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;

public class FormLoginExample {
 
   public static void main(String args[]) throws Exception {

      //Creating CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
 
      //Creating the RequestBuilder object
      RequestBuilder reqbuilder = RequestBuilder.post();

      //Setting URI and parameters
      RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post");
      RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name", 
         "username").addParameter("password", "password");

      //Building the HttpUriRequest object
      HttpUriRequest httppost = reqbuilder2.build();

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httppost);

      //Printing the status and the contents of the response
      System.out.println(EntityUtils.toString(httpresponse.getEntity()));
      System.out.println(httpresponse.getStatusLine());
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

{
   "args": {},
   "data": "",
   "files": {},
   "form": {
      "Name": "username",
      "password": "password"
   },
   "headers": {
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Content-Length": "31",
      "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8",
      "Host": "httpbin.org",
      "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
   },
   "json": null,
   "origin": "117.216.245.180",
   "url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK

Çerezlerle Giriş Formu

Formunuz varsayılan oluşturmak yerine çerez depoluyorsa CloseableHttpClient nesne.

Create a CookieStore object BasicCookieStore sınıfını başlatarak.

//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();

Create a HttpClientBuilder kullanmak custom() yöntemi HttpClients sınıf.

//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();

Set the cookie store to the client builder setDefaultCookieStore () yöntemini kullanarak.

//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);

İnşa et CloseableHttpClient kullanarak nesne build() yöntem.

//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();

İnşa et HttpUriRequest İsteği yürütmek suretiyle yukarıda belirtildiği gibi nesne.

Sayfada tanımlama bilgileri bulunuyorsa, geçirdiğiniz parametreler tanımlama bilgisi deposuna eklenecektir.

İçeriğini yazdırabilirsiniz. CookieStore parametrelerinizi görebileceğiniz nesne (öncekilerle birlikte, durumda saklanan sayfa).

Çerezleri yazdırmak için tüm çerezleri CookieStore kullanarak nesne getCookies()yöntem. Bu yöntem birListnesne. Yineleyiciyi kullanarak, liste nesnelerinin içeriğini aşağıda gösterildiği gibi yazdırın -

//Printing the cookies
List list = cookieStore.getCookies();

System.out.println("list of cookies");
Iterator it = list.iterator();
if(it.hasNext()) {
   System.out.println(it.next());
}

Çerezler, istemci bilgisayarda saklanan metin dosyalarıdır ve çeşitli bilgi takibi amacıyla saklanır.

HttpClient, tanımlama bilgileri oluşturup yönetebileceğiniz tanımlama bilgileri için destek sağlar.

Çerez oluşturmak

HttpClient kitaplığını kullanarak bir tanımlama bilgisi oluşturmak için aşağıda verilen adımları izleyin.

Adım 1 - Cookiestore nesnesi oluşturun

CookieStorearabirim, Cookie nesnelerinin soyut deposunu temsil eder. Bir tanımlama bilgisi deposu oluşturabilirsiniz.BasicCookieStore sınıfı, bu arabirimin varsayılan uygulaması.

//Creating the CookieStore object
CookieStore cookieStore = new BasicCookieStore();

Adım 2 - ClientCookie nesnesi oluşturun

Bir tanımlama bilgisinin işlevlerine ek olarak, ClientCookie sunucudaki orijinal tanımlama bilgilerini alabilir. Bir müşteri çerezi oluşturabilirsiniz.BasicClientCookiesınıf. Bu sınıfın kurucusuna, o belirli çerezde saklamak istediğiniz anahtar / değer çiftini iletmeniz gerekir.

//Creating client cookie
BasicClientCookie clientCookie = new BasicClientCookie("name","Raju");

Adım 3 - Çereze değerleri ayarlayın

Bir müşteri çerezi için, ilgili yöntemleri kullanarak yolu, değeri, sürümü, son kullanma tarihini, etki alanını, yorumu ve özniteliği ayarlayabilir / kaldırabilirsiniz.

Calendar myCal = new GregorianCalendar(2018, 9, 26);
Date expiryDate = myCal.getTime();
clientcookie.setExpiryDate(expiryDate);
clientcookie.setPath("/");
clientcookie.setSecure(true);
clientcookie.setValue("25");
clientcookie.setVersion(5);

Adım 4 - Çerez deposuna çerez ekleyin

Çerez deposuna çerez ekleyebilirsiniz. addCookie() yöntemi BasicCookieStore sınıf.

Gerekli çerezleri şuraya ekleyin: Cookiestore.

//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie);

Misal

Aşağıdaki örnek, çerezlerin nasıl oluşturulacağını ve bir çerez deposuna nasıl ekleneceğini gösterir. Burada, alan ve yol değerlerini ayarlayarak bir çerez deposu, bir grup çerez oluşturduk ve bunları çerez deposuna ekledik.

import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;

public class CookieHandlingExample {
   
   public static void main(String args[]) throws Exception{
      
      //Creating the CookieStore object
      CookieStore cookiestore = new BasicCookieStore();
 
      //Creating client cookies
      BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
      BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
      BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");

      //Setting domains and paths to the created cookies
      clientcookie1.setDomain(".sample.com");
      clientcookie2.setDomain(".sample.com");
      clientcookie3.setDomain(".sample.com");

      clientcookie1.setPath("/");
      clientcookie2.setPath("/");
      clientcookie3.setPath("/");
 
      //Adding the created cookies to cookie store
      cookiestore.addCookie(clientcookie1);
      cookiestore.addCookie(clientcookie2);
      cookiestore.addCookie(clientcookie3);
   }
}

Çerez almak

Çerezleri kullanarak bir çerez deposuna ekleyebilirsiniz. getCookies() yöntemi asicCookieStoresınıf. Bu yöntem, çerez deposundaki tüm çerezleri tutan bir liste döndürür.

Aşağıda gösterildiği gibi Yineleyiciyi kullanarak bir çerez deposunun içeriğini yazdırabilirsiniz -

//Retrieving the cookies
List list = cookieStore.getCookies();

//Creating an iterator to the obtained list
Iterator it = list.iterator();
while(it.hasNext()) {
   System.out.println(it.next());
}

Misal

Aşağıdaki örnek, bir çerez deposundan çerezlerin nasıl alınacağını gösterir. Burada, bir çerez deposuna bir grup çerez ekliyor ve onları geri alıyoruz.

import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;

public class CookieHandlingExample {
 
   public static void main(String args[]) throws Exception{
      
      //Creating the CookieStore object
      CookieStore cookiestore = new BasicCookieStore();
      
      //Creating client cookies
      BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
      BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
      BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");

      //Setting domains and paths to the created cookies
      clientcookie1.setDomain(".sample.com");
      clientcookie2.setDomain(".sample.com");
      clientcookie3.setDomain(".sample.com");

      clientcookie1.setPath("/");
      clientcookie2.setPath("/");
      clientcookie3.setPath("/");
 
      //Adding the created cookies to cookie store
      cookiestore.addCookie(clientcookie1);
      cookiestore.addCookie(clientcookie2);
      cookiestore.addCookie(clientcookie3);
   }
}

Çıktı

Bu program yürütülürken aşağıdaki çıktıyı üretir -

[version: 0][name: age][value: 28][domain: .sample.com][path: /][expiry: null]
[version: 0][name: name][value: Raju][domain: my.example.com][path: /][expiry:
null]
[version: 0][name: place][value: Hyderabad][domain: .sample.com][path:
/][expiry: null]

Çok iş parçacıklı bir program, eşzamanlı olarak çalışabilen iki veya daha fazla parça içerir ve her parça aynı anda farklı bir görevi yerine getirerek mevcut kaynakları en iyi şekilde kullanabilir.

Çok iş parçacıklı bir HttpClient programı yazarak birden çok iş parçacığından istekleri yürütebilirsiniz.

Ardışık olarak iş parçacıklarından birden fazla istemci isteği yürütmek istiyorsanız, bir ClientConnectionPoolManager. Bir havuz tutarHttpClientConnections ve iş parçacıklarından birden çok istek sunar.

Bağlantı yöneticisi, bağlantıları rotaya göre havuzlar. Yöneticinin belirli bir yol için bağlantıları varsa, yeni bir bağlantı oluşturmak yerine havuzdan mevcut bir bağlantıyı kiralayarak bu yollarda yeni isteklere hizmet eder.

Birden çok iş parçacığından istekleri yürütmek için adımları izleyin -

Adım 1 - İstemci Bağlantı Havuzu Yöneticisinin Oluşturulması

İstemci Bağlantı Havuzu Yöneticisi'ni oluşturun. PoolingHttpClientConnectionManager sınıf.

PoolingHttpClientConnectionManager connManager = new
   PoolingHttpClientConnectionManager();

Adım 2 - Maksimum bağlantı sayısını ayarlayın

Havuzdaki maksimum bağlantı sayısını ayarlayın. setMaxTotal() yöntem.

//Set the maximum number of connections in the pool
connManager.setMaxTotal(100);

Adım 3 - ClientBuilder Nesnesi Oluşturun

Oluşturmak ClientBuilder Bağlantı yöneticisini kullanarak nesneyi setConnectionManager() aşağıda gösterildiği gibi yöntem -

HttpClientBuilder clientbuilder =
HttpClients.custom().setConnectionManager(connManager);

Adım 4 - HttpGet istek nesnelerini oluşturun

İstenen URI'yi yapıcısına parametre olarak ileterek HttpGet sınıfını örnekleyin.

HttpGet httpget1 = new HttpGet("URI1");
HttpGet httpget2 = new HttpGet("URI2");
. . . . . . . . . . . .

Adım 5 - Çalıştırma yönteminin uygulanması

Bir sınıf oluşturduğunuzdan, onu bir iş parçacığı haline getirdiğinizden (iş parçacığı sınıfını genişleterek veya Runnable arabirimini uygulayarak) ve run yöntemini uyguladığınızdan emin olun.

public class ClientMultiThreaded extends Thread {
   public void run() {
      //Run method implementation . . . . . . . . . .
   }
}

Adım 6 - Konu nesneleri oluşturun

Yukarıda oluşturulan Thread sınıfını (ClientMultiThreaded) somutlaştırarak iş parçacığı nesneleri oluşturun.

Bir HttpClient nesnesi, ilgili HttpGet nesnesi ve kimliği temsil eden bir tamsayı bu iş parçacıklarına iletin.

ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1);
ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2);
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Adım 7 - Başlayın ve konuları birleştirin

Kullanarak tüm konuları başlatın start() yöntemi ve birleştirmeyi kullanarak onlara katılın method().

thread1.start();
thread2.start();
. . . . . . . .
thread1.join();
thread2.join();
. . . . . . . . . . . .

Adım 8 - Yöntem uygulamasını çalıştırın

Çalıştırma yöntemi içinde, isteği yürütün, yanıtı alın ve sonuçları yazdırın.

Misal

Aşağıdaki örnek, HTTP isteklerinin aynı anda birden çok iş parçacığından yürütülmesini gösterir. Bu örnekte, çeşitli iş parçacıklarından çeşitli istekleri yerine getirmeye ve durumu ve her istemci tarafından okunan bayt sayısını yazdırmaya çalışıyoruz.

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
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.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

public class ClientMultiThreaded extends Thread {
   CloseableHttpClient httpClient;
   HttpGet httpget;
   int id;
 
   public ClientMultiThreaded(CloseableHttpClient httpClient, HttpGet httpget,
   int id) {
      this.httpClient = httpClient;
      this.httpget = httpget;
      this.id = id;
   }
   @Override
   public void run() {
      try{
         //Executing the request
         CloseableHttpResponse httpresponse = httpClient.execute(httpget);

         //Displaying the status of the request.
         System.out.println("status of thread "+id+":"+httpresponse.getStatusLine());

         //Retrieving the HttpEntity and displaying the no.of bytes read
         HttpEntity entity = httpresponse.getEntity();
         if (entity != null) {
            System.out.println("Bytes read by thread thread "+id+":
               "+EntityUtils.toByteArray(entity).length);
         }
      }catch(Exception e) {
         System.out.println(e.getMessage());
      }
   }
      
   public static void main(String[] args) throws Exception {

      //Creating the Client Connection Pool Manager by instantiating the PoolingHttpClientConnectionManager class.
      PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();

      //Set the maximum number of connections in the pool
      connManager.setMaxTotal(100);

      //Create a ClientBuilder Object by setting the connection manager
      HttpClientBuilder clientbuilder = HttpClients.custom().setConnectionManager(connManager);
 
      //Build the CloseableHttpClient object using the build() method.
      CloseableHttpClient httpclient = clientbuilder.build();

      //Creating the HttpGet requests
      HttpGet httpget1 = new HttpGet("http://www.tutorialspoint.com/");
      HttpGet httpget2 = new HttpGet("http://www.google.com/");
      HttpGet httpget3 = new HttpGet("https://www.qries.com/");
      HttpGet httpget4 = new HttpGet("https://in.yahoo.com/");
 
      //Creating the Thread objects
      ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1);
      ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2);
      ClientMultiThreaded thread3 = new ClientMultiThreaded(httpclient,httpget3, 3);
      ClientMultiThreaded thread4 = new ClientMultiThreaded(httpclient,httpget4, 4);

      //Starting all the threads
      thread1.start();
      thread2.start();
      thread3.start();
      thread4.start();

      //Joining all the threads
      thread1.join();
      thread2.join();
      thread3.join();
      thread4.join();
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

status of thread 1: HTTP/1.1 200 OK
Bytes read by thread thread 1: 36907
status of thread 2: HTTP/1.1 200 OK
Bytes read by thread thread 2: 13725
status of thread 3: HTTP/1.1 200 OK
Bytes read by thread thread 3: 17319
status of thread 4: HTTP/1.1 200 OK
Bytes read by thread thread 4: 127018

Secure Socket Layer kullanarak, istemci ve sunucu arasında güvenli bir bağlantı kurabilirsiniz. Kredi kartı numaraları, kullanıcı adları, şifreler, pimler vb. Gibi hassas bilgilerin korunmasına yardımcı olur.

Kullanarak kendi SSL bağlamınızı oluşturarak bağlantıları daha güvenli hale getirebilirsiniz. HttpClient kütüphane.

HttpClient kitaplığını kullanarak SSLContext'i özelleştirmek için aşağıda verilen adımları izleyin -

Adım 1 - SSLContextBuilder nesnesi oluşturun

SSLContextBuilderSSLContext nesneleri için oluşturucudur. Kullanarak nesnesini oluşturuncustom() yöntemi SSLContexts sınıf.

//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();

Adım 2 - Anahtar Deposunu Yükleyin

Yolda Java_home_directory/jre/lib/security/, cacerts adlı bir dosya bulabilirsiniz. Bunu anahtar deposu dosyanız olarak kaydedin (.jks uzantısıyla). Anahtar deposu dosyasını ve şifresini yükleyin (changeit varsayılan olarak) kullanarak loadTrustMaterial() yöntemi SSLContextBuilder sınıf.

//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray());

Adım 3 - Bir SSLContext nesnesi oluşturun

Bir SSLContext nesnesi, güvenli bir soket protokolü uygulamasını temsil eder. Kullanarak bir SSLContext oluşturunbuild() yöntem.

//Building the SSLContext
SSLContext sslContext = SSLBuilder.build();

Adım 4 - SSLConnectionSocketFactory nesnesinin oluşturulması

SSLConnectionSocketFactoryTSL ve SSL bağlantıları için katmanlı bir soket fabrikasıdır. Bunu kullanarak, güvenilir sertifikalar listesini kullanarak Https sunucusunu doğrulayabilir ve verilen Https sunucusunun kimliğini doğrulayabilirsiniz.

Bunu birçok şekilde yaratabilirsiniz. Oluşturma şekline bağlı olarakSSLConnectionSocketFactory nesne, tüm ana bilgisayarlara izin verebilir, yalnızca kendinden imzalı sertifikalara izin verebilir, yalnızca belirli protokollere izin verebilir, vb.

To allow only particular protocols, oluşturmak SSLConnectionSocketFactory nesnesini bir SSLContext nesnesi geçirerek, protokolleri temsil eden dize dizisinin desteklenmesi gerekir, şifre takımlarını temsil eden dize dizisinin desteklenmesi gerekir ve yapıcısına bir HostnameVerifier nesnesi.

new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,    
   SSLConnectionSocketFactory.getDefaultHostnameVerifier());

To allow all hosts, oluşturmak SSLConnectionSocketFactory nesnesini bir SSLContext nesnesi ve bir NoopHostnameVerifier nesne.

//Creating SSLConnectionSocketFactory SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());

Adım 5 - HttpClientBuilder nesnesi oluşturun

Bir HttpClientBuilder nesnesi oluşturun. custom() yöntemi HttpClients sınıf.

//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

Adım 6 - SSLConnectionSocketFactory nesnesini ayarlayın

SSLConnectionSocketFactory nesnesini şu şekilde ayarlayın: HttpClientBuilder kullanmak setSSLSocketFactory() yöntem.

//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);

Adım 7 - CloseableHttpClient nesnesini oluşturun

İnşa et CloseableHttpClient nesneyi çağırarak build() yöntem.

//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();

Adım 8 - Bir HttpGet nesnesi oluşturun

HttpGet sınıfı, belirli bir sunucunun bilgilerini bir URI kullanarak alan HTTP GET isteğini temsil eder.

URI'yi temsil eden bir dize ileterek HttpGet sınıfını başlatarak bir HTTP GET isteği oluşturun.

//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");

Adım 9 - İsteği gerçekleştirin

İsteği kullanarak gerçekleştirin execute() yöntem.

//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);

Misal

Aşağıdaki örnek, SSLContrext'in özelleştirilmesini göstermektedir -

import java.io.File;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
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.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

public class ClientCustomSSL {
   
   public final static void main(String[] args) throws Exception {

      //Creating SSLContextBuilder object
      SSLContextBuilder SSLBuilder = SSLContexts.custom();
  
      //Loading the Keystore file
      File file = new File("mykeystore.jks");
      SSLBuilder = SSLBuilder.loadTrustMaterial(file,
         "changeit".toCharArray());

      //Building the SSLContext usiong the build() method
      SSLContext sslcontext = SSLBuilder.build();
 
      //Creating SSLConnectionSocketFactory object
      SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
 
      //Creating HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the SSLConnectionSocketFactory
      clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);

      //Building the CloseableHttpClient
      CloseableHttpClient httpclient = clientbuilder.build();
      
      //Creating the HttpGet request
      HttpGet httpget = new HttpGet("https://example.com/");
 
      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httpget);

      //printing the status line
      System.out.println(httpresponse.getStatusLine());

      //Retrieving the HttpEntity and displaying the no.of bytes read
      HttpEntity entity = httpresponse.getEntity();
      if (entity != null) {
         System.out.println(EntityUtils.toByteArray(entity).length);
      } 
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir.

HTTP/1.1 200 OK
1270

HttpClient kullanarak, Çok parçalı yükleme yapabiliriz, yani daha büyük nesneleri daha küçük parçalar halinde yükleyebiliriz. Bu bölümde, basit bir metin dosyası yükleyerek HTTP istemcisinde çok parçalı yüklemeyi gösteriyoruz.

Genel olarak, herhangi bir çok parçalı yükleme üç bölümden oluşur.

  • Yüklemenin başlatılması

  • Nesne parçalarının yüklenmesi

  • Çok parçalı yüklemeyi tamamlama

HttpClient kullanarak çok parçalı yükleme için aşağıdaki adımları izlememiz gerekir -

  • Çok parçalı bir oluşturucu oluşturun.

  • İstediğiniz parçaları ekleyin.

  • Derlemeyi tamamlayın ve çok parçalı bir HttpEntity edinin.

  • Yukarıdaki çok parçalı varlığı ayarlayarak istek oluşturun.

  • İsteği gerçekleştirin.

HttpClient kitaplığını kullanarak çok parçalı bir varlığı karşıya yükleme adımları aşağıda verilmiştir.

Adım 1 - HttpClient nesnesi oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, HttpClient arabiriminin temel uygulamasıdır. Bu yöntemi kullanarak bir HttpClient nesnesi oluşturun -

//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();

Adım 2 - Bir FileBody nesnesi oluşturun

FileBodyclass, bir dosya tarafından desteklenen ikili gövde bölümünü temsil eder. Bu sınıfı birFile nesne ve bir ContentType içeriğin türünü temsil eden nesne.

//Creating a File object
File file = new File("sample.txt");

//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);

Adım 3 - Bir MultipartEntityBuilder Oluşturun

MultipartEntityBuilder sınıf, çok parçalı oluşturmak için kullanılır HttpEntitynesne. Kullanarak nesnesini oluşturuncreate() yöntem (aynı sınıftan).

//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();

Adım 4 - Modu ayarlayın

Bir MultipartEntityBuilderüç moda sahiptir: STRICT, RFC6532 ve BROWSER_COMPATIBLE. Kullanarak istediğiniz moda ayarlayın.setMode() yöntem.

//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

Adım 5 - İstenen çeşitli parçaları ekleyin

Yöntemleri kullanma addTextBody(), addPart () ve, addBinaryBody(), basit metinler, dosyalar, akışlar ve başka nesneler ekleyebilirsiniz. MultipartBuilder. Bu yöntemleri kullanarak istediğiniz içeriği ekleyin.

//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));

Adım 6 - Tek bir varlık oluşturmak

Tüm bu parçaları tek bir varlıkta inşa edebilirsiniz. build() yöntemi MultipartEntityBuildersınıf. Bu yöntemi kullanarak tüm parçaları tek birHttpEntity.

//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entityBuilder.build();

Adım 7 - Bir RequestBuilder nesnesi oluşturun

Sınıf RequestBuilderona parametreler ekleyerek istek oluşturmak için kullanılır. İstek PUT veya POST türündeyse, parametreleri isteğe URL kodlu varlık olarak ekler.

Kullanarak bir RequestBuilder nesnesi (POST türü) oluşturun. post()yöntem. Ve isteği bir parametre olarak göndermek istediğiniz Uri'yi iletin.

//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");

Adım 8 - Varlık nesnesini RequestBuilder olarak ayarlayın

Yukarıda oluşturulan çok parçalı varlığı, şunu kullanarak RequestBuilder'a ayarlayın. setEntity() yöntemi RequestBuilder sınıf.

//Setting the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);

Adım 9 - HttpUriRequest'i oluşturun

İnşa et HttpUriRequest kullanarak nesne iste build() yöntemi RequestBuilder sınıf.

//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();

Adım 10 - İsteği gerçekleştirin

Kullanmak execute() yöntem, önceki adımda oluşturulan isteği yürütün (isteği bu yönteme bir parametre olarak atlayarak).

//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);

Misal

Aşağıdaki örnek, HttpClient kitaplığı kullanılarak çok parçalı bir isteğin nasıl gönderileceğini gösterir. Bu örnekte, bir dosya ile desteklenen çok parçalı bir istek göndermeye çalışıyoruz.

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class MultipartUploadExample {
 
   public static void main(String args[]) throws Exception{

      //Creating CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
 
      //Creating a file object
      File file = new File("sample.txt");

      //Creating the FileBody object
      FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);

      //Creating the MultipartEntityBuilder
      MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();

      //Setting the mode
      entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

      //Adding text
      entitybuilder.addTextBody("sample_text", "This is the text part of our file");

      //Adding a file
      entitybuilder.addBinaryBody("image", new File("logo.png"));

      //Building a single entity using the parts
      HttpEntity mutiPartHttpEntity = entitybuilder.build();

      //Building the RequestBuilder request object
      RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");

      //Set the entity object to the RequestBuilder
      reqbuilder.setEntity(mutiPartHttpEntity);

      //Building the request
      HttpUriRequest multipartRequest = reqbuilder.build();

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(multipartRequest);

      //Printing the status and the contents of the response
      System.out.println(EntityUtils.toString(httpresponse.getEntity()));
      System.out.println(httpresponse.getStatusLine());
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

{
   "args": {},
   "data": "",
   "files": {
      "image": "data:application/octets66PohrH3IWNk1FzpohfdXPIfv9X3490FGcuXsHn9X0piCwomF/xdgADZ9GsfSyvLYAAAAAE
      lFTkSuQmCC"
   },
   "form": {
      "sample_text": "This is the text part of our file"
   },
   "headers": {
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Content-Length": "11104", 
      "Content-Type": "multipart/form-data;
      boundary=UFJbPHT7mTwpVq70LpZgCi5I2nvxd1g-I8Rt",
      "Host": "httpbin.org",
      "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
   },
   "json": null,
   "origin": "117.216.245.180",
   "url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK