Apache HttpClient - 中止请求

  • 简述

    您可以使用 abort() 方法中止当前的 HTTP 请求,即,在调用此方法后,在特定请求上,它的执行将被中止。
    如果在一次执行后调用该方法,则该执行的响应不受影响,后续执行将被中止。
  • 示例

    如果您观察以下示例,我们创建了一个 HttpGet 请求,使用 getMethod() 打印了使用的请求格式。
    然后,我们用相同的请求执行了另一次执行。再次使用 1st 执行打印状态行。最后,打印第二次执行的状态行。
    如前所述,第 1st 执行(在 abort 方法之前执行)的响应被打印(包括在 abort 方法之后写入的第二个状态行),并且所有后续执行的abort 方法后的当前请求调用异常失败。
    
    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.jc2182.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());
       }
    }
    
  • 输出

    在执行时,上面的程序生成以下输出 -
    
    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)