Если вы обрабатываете 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(); } } }
Выход
При выполнении вышеупомянутой программы генерируется следующий вывод: