vc httpclient_HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例

这篇教程介绍了如何在Java中使用HttpClient 4 API来获取HTTP响应的状态代码。主要内容包括Maven依赖的设置,从HttpResponse中检索状态代码的方法,以及URL断开时可能遇到的异常情况。
摘要由CSDN通过智能技术生成
vc httpclient

vc httpclient

在HttpClient API中获取状态代码的快速指南。 getStatusLine()。getStatusCode()示例和相关的错误。

1.简介

在这个非常快速的教程中,我将展示如何使用HttpClient 4获取和验证HTTP响应的StatusCode。

2. Maven依赖

要运行此HttiClient应用程序,需要以下jar。

commons-logging在内部被其他jar使用。 请不要忘记添加这些jar,否则您将获得编译时和运行时错误。

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.13</version>
</dependency>

错误:

如果您错过了commons-logging jar,则将产生以下异常。

 Exception in thread "main" Exception in thread java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

 at org.apache.http.conn.ssl.DefaultHostnameVerifier.<init>(DefaultHostnameVerifier.java: 82 )

 at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java: 966 )

 at com.java.w3schools.blog.HttpClient.HttpClientGetStatusCode.main(HttpClientGetStatusCode.java: 21 )
 Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java: 583 )

 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java: 178 )

 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java: 521 )

 ... 3 more

3.从Http响应中检索状态代码

发送HTTP请求后,经过处理后,响应将发送回调用方。

 package com.java.w3schools.blog.HttpClient;
 import java.io.IOException;
 import org.apache.http.HttpStatus;
 import org.apache.http.client.ClientProtocolException;
 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;
 public class HttpClientGetStatusCode { 
 private static final String GOOGLE_URL = " http://www.google.com " ; 
 private static CloseableHttpClient instance; 
 private static CloseableHttpResponse response; 
 public static void main(String[] args) throws ClientProtocolException, IOException {

  HttpGet httpGet = new HttpGet(GOOGLE_URL);

  instance = HttpClientBuilder.create().build();

  response = instance.execute(httpGet);

  System.out.println( "response.getStatusLine() :: " + response.getStatusLine());

  final int statusCode = response.getStatusLine().getStatusCode(); 
  int code = HttpStatus.SC_OK; 
  if (code == statusCode) { 
   System.out.println( "Status Code : " + code);

  } else {

   System.out.println( "StatusCode not 200 : " + code);

  }

 }
 }

返回的响应类型为org.apache.http.HttpResponse ,它使我们能够获取请求的执行状态。 getStatusLine()方法返回保存请求状态的StatusLine对象。 采用getStatusCode()仅获取执行代码。

输出:

 response.getStatusLine() :: HTTP/ 1.1 200 OK
 Status Code : 200

4. URL断开时例外

如果给定的URL关闭或错误,那么我们将获得UnknownHostException运行时异常。

 Exception in thread "main" Exception in thread java.net.UnknownHostException: www.google.com1: nodename nor servname provided, or not known

 at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)

 at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java: 929 )

 at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java: 1515 )

 at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java: 848 )

 at java.base/java.net.InetAddress.getAllByName0(InetAddress.java: 1505 )

 at java.base/java.net.InetAddress.getAllByName(InetAddress.java: 1364 )

 at java.base/java.net.InetAddress.getAllByName(InetAddress.java: 1298 )

 at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java: 45 )

 at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java: 112 )

 at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java: 376 )

 at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java: 393 )

 at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java: 236 )

 at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java: 186 )

 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 com.java.w3schools.blog.HttpClient.HttpClientGetStatusCode.main(HttpClientGetStatusCode.java: 24 )

5.结论

在本文中,我们已经了解了如何获取HttpClient请求的状态代码

与往常一样,本文显示的示例在Github上。

GitHub代码

翻译自: https://www.javacodegeeks.com/2020/04/httpclient-4-api-get-the-status-code-getstatusline-getstatuscode-example.html

vc httpclient

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值