Учебники

Apache HttpClient — закрытие соединения

Если вы обрабатываете HTTP-ответы вручную, а не используете обработчик ответов, вам необходимо закрыть все http-соединения самостоятельно. В этой главе объясняется, как закрыть соединения вручную.

При закрытии HTTP-соединений вручную следуйте инструкциям ниже:

Шаг 1 — Создайте объект HttpClient

Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient.

Используя этот метод, создайте объект HttpClient, как показано ниже —

CloseableHttpClient httpClient = HttpClients.createDefault();

Шаг 2 — Запустите блок try-finally

Запустите блок try-finally, запишите оставшийся код в программах в блоке try и закройте объект CloseableHttpClient в блоке finally.

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

Шаг 3 — Создание HttpGetobject

Класс HttpGet представляет HTTP-запрос GET, который извлекает информацию о данном сервере с использованием URI.

Создайте HTTP-запрос GET, создав экземпляр класса HttpGet, передав строку, представляющую URI.

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

Шаг 4 — Выполнить запрос Get

Метод execute () объекта CloseableHttpClient принимает объект HttpUriRequest (interface) (т. Е. HttpGet, HttpPost, HttpPut, HttpHead и т. Д.) И возвращает объект ответа.

Выполнить запрос, используя данный метод —

HttpResponse httpResponse = httpclient.execute(httpGet);

Шаг 5 — Запустите еще одну (вложенную) попытку

Запустите другой блок try-finally (вложенный в предыдущий блок try-finally), запишите оставшийся код в программах этого блока try и закройте объект HttpResponse в блоке finally.

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

пример

Всякий раз, когда вы создаете / получаете объекты, такие как запрос, поток ответов и т. Д., Начинайте блок try finally на следующей строке, пишите оставшийся код в блоке try и закрывайте соответствующий объект в блоке finally, как показано в следующей программе:

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

Выход

При выполнении вышеупомянутой программы генерируется следующий вывод: