首页 > 其他分享 >HttpClient—请求第三方的服务

HttpClient—请求第三方的服务

时间:2024-10-26 12:18:37浏览次数:7  
标签:HTTP 请求 对象 发送 响应 第三方 HttpClient

1. 介绍

1.1 简介

HttpClient 是 Apache Jakarta Commons 项目中的一个子项目,为开发人员提供了一个高效、功能丰富、支持最新 HTTP 协议的客户端工具包。它不仅可以支持 HTTP/1.1 和 HTTP/2 等最新版本的 HTTP 协议,还包括一系列高级特性,如连接池管理、SSL 支持、自动重试机制、代理支持、带宽限制等,旨在帮助开发者轻松进行 HTTP 通信。

1.2 HttpClient作用

  • 发送 HTTP 请求:通过 HttpClient 可以向服务端发送 GET、POST、PUT、DELETE 等 HTTP 请求。

  • 接收响应数据:在请求发出后,可以获取到服务器返回的响应信息,包括状态码、响应头以及响应体内容。

1.3 HttpClient应用场景

在现代应用中,HttpClient 的使用场景非常广泛,以下是几个常见的应用场景:

  1. 扫描支付:例如调用第三方支付接口(如支付宝、微信支付)进行扫码支付。应用程序通过 HttpClient 发送支付请求,获取支付二维码。

  2. 地图服务:例如调用百度地图、Google Maps 的 API 获取地理位置信息,应用程序通过 HttpClient 向这些服务发送请求,并接收相应的地理信息数据。

  3. 验证码获取:例如短信或邮箱验证码,应用程序调用第三方短信或邮件服务,向用户发送验证码。

  4. 天气查询:应用程序通过访问第三方天气服务 API(如中国气象网、OpenWeather API)获取最新的天气信息并展示给用户。

  5. 社交媒体交互:例如从 Twitter、Facebook 或 LinkedIn 获取用户动态,进行社交媒体内容的展示与分析。

在这些场景下,应用程序本身并未实现这些具体功能,而是通过发送 HTTP 请求来访问和利用第三方提供的功能服务。通过使用 HttpClient,开发者可以轻松构建、发送 HTTP 请求,并接收和解析响应数据。

1.4 使用

1.4.1 HttpClient的maven坐标

要使用 HttpClient,首先需要在项目的 Maven 配置文件(pom.xml)中添加依赖。可以通过以下 Maven 坐标来引入 HttpClient 库:

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

1.4.2 HttpClient的核心API

  • HttpClient:HTTP 客户端接口,定义了 HTTP 通信的主要方法,用于发起 HTTP 请求。

  • HttpClients:是 HttpClient 的构建器类,可以通过静态方法来创建 HttpClient 实例,提供了方便的配置方式,如连接池和超时设置等。

  • CloseableHttpClientHttpClient 的一个实现类,实现了自动资源管理接口 Closeable,在请求完成后可以自动关闭资源。

  • HttpGet:代表 HTTP GET 请求,常用于获取数据。

  • HttpPost:代表 HTTP POST 请求,通常用于发送数据,如表单提交和 JSON 数据传输。

1.4.3 HttpClient发送请求步骤

使用 HttpClient 发送请求的步骤如下:

(1)创建 HttpClient 对象

  • 通过 HttpClients.createDefault() 方法创建一个 CloseableHttpClient 实例。

  • 如果需要定制化配置,例如连接池大小、超时设置等,可以使用 HttpClients.custom() 方法来构建。

CloseableHttpClient httpClient = HttpClients.createDefault();

(2)创建 HTTP 请求对象

  • 根据请求的类型,创建相应的请求对象,如 HttpGetHttpPost 等。

  • 设置请求的 URL 以及请求头、请求参数等。

HttpGet request = new HttpGet("https://api.example.com/data");
request.setHeader("Accept", "application/json");

(3)调用 HttpClient 的 execute 方法发送请求

  • 使用 httpClient.execute(request) 方法发送请求,并获取响应对象 CloseableHttpResponse

  • 响应对象可以用来获取状态码、响应头和响应体数据。

  • 操作完成后,记得关闭 CloseableHttpClientCloseableHttpResponse 以释放资源。

try (CloseableHttpResponse response = httpClient.execute(request)) {
    int statusCode = response.getStatusLine().getStatusCode();
    HttpEntity entity = response.getEntity();
    String result = EntityUtils.toString(entity);
    System.out.println("Response status code: " + statusCode);
    System.out.println("Response content: " + result);
} catch (IOException e) {
    e.printStackTrace();
}

2. 使用示例

2.1 GET方式请求

2.1.1 导入maven坐标

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

2.1.2 代码示例

@SpringBootTest
public class HttpClientTest {

    /**
     * 测试通过 HttpClient 发送 GET 请求的方法。
     * 使用 SpringBootTest 注解,支持 Spring Boot 应用环境下的测试。
     */
    @Test
    public void testGET() throws Exception {
        // 1. 创建 HttpClient 对象
        // 使用 HttpClients 的静态方法创建一个默认的 HttpClient 实例,能够发送 HTTP 请求
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 2. 创建 GET 请求对象
        // HttpGet 对象代表一个 HTTP GET 请求,这里设置请求的 URL 为 "http://localhost:8080/status"
        HttpGet httpGet = new HttpGet("http://localhost:8080/status");

        // 3. 发送请求并接受响应结果
        // 使用 HttpClient 的 execute 方法发送请求,并获取服务器的响应对象(CloseableHttpResponse)
        CloseableHttpResponse response = httpClient.execute(httpGet);

        // 4. 获取服务器返回的状态码
        // 从响应对象中提取状态码,状态码可以用于判断请求是否成功 (如 200 表示成功)
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务端返回的状态码为:" + statusCode);

        // 5. 获取响应体内容
        // 从响应对象中获取响应体(HttpEntity),将其转换为字符串格式
        // 需要使用 EntityUtils.toString() 将 HttpEntity 转换为可读的字符串格式
        HttpEntity entity = response.getEntity();
        String body = EntityUtils.toString(entity);
        System.out.println("服务端返回的数据为:" + body);

        // 6. 关闭资源
        // 为了避免资源泄露,应该在完成请求后关闭响应对象和 HttpClient 对象
        response.close();
        httpClient.close();
    }
}

2.2 POST方式请求

POST方式请求方法,相比GET请求来说,POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。

/**
 * 测试通过 HttpClient 发送 POST 请求的方法。
 * 使用 SpringBootTest 注解,支持 Spring Boot 应用环境下的测试。
 */
@Test
public void testPOST() throws Exception {
    // 1. 创建 HttpClient 对象
    // 使用 HttpClients 的静态方法创建一个默认的 HttpClient 实例,用于发送 HTTP 请求
    CloseableHttpClient httpClient = HttpClients.createDefault();

    // 2. 创建 POST 请求对象
    // HttpPost 对象代表一个 HTTP POST 请求,这里设置请求的 URL 为 "http://localhost:8080/admin/employee/login"
    HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");

    // 3. 构造 JSON 数据
    // 创建一个 JSON 对象,将用户名和密码放入 JSON 中,模拟登录请求的请求体
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("username", "admin");
    jsonObject.put("password", "123456");

    // 4. 设置请求实体(请求体)
    // 将 JSON 对象转换为字符串并构建成 StringEntity 对象,指定请求体内容
    StringEntity entity = new StringEntity(jsonObject.toString());
    // 设置请求体的编码方式为 UTF-8
    entity.setContentEncoding("utf-8");
    // 设置请求体的数据格式为 JSON
    entity.setContentType("application/json");
    // 将请求实体添加到 POST 请求中
    httpPost.setEntity(entity);

    // 5. 发送请求并接收响应
    // 使用 HttpClient 的 execute 方法发送 POST 请求,并获取服务器返回的响应对象(CloseableHttpResponse)
    CloseableHttpResponse response = httpClient.execute(httpPost);

    // 6. 解析返回结果
    // 获取响应状态码,可用于判断请求是否成功(如 200 表示成功)
    int statusCode = response.getStatusLine().getStatusCode();
    System.out.println("响应码为:" + statusCode);

    // 获取响应体内容,将响应的 HttpEntity 转换为字符串格式
    HttpEntity entity1 = response.getEntity();
    String body = EntityUtils.toString(entity1);
    System.out.println("响应数据为:" + body);

    // 7. 关闭资源
    // 为避免资源泄露,在完成请求后关闭响应对象和 HttpClient 对象
    response.close();
    httpClient.close();
}

标签:HTTP,请求,对象,发送,响应,第三方,HttpClient
From: https://blog.csdn.net/qq_46637011/article/details/143251518

相关文章

  • 相关请求参数的区别
    在前端开发中,params参数和path参数是两种常见的用于向后端发送数据的方式。以下是对这两种参数的详细解释以及后端如何获取它们,同时也会介绍如何使用axios从前端传递数据到后端的req.body。Path参数定义:Path参数是URL路径的一部分,通常用于标识资源的唯一性或特......
  • 抖音抖店 API 请求获取宝贝详情数据的调用频率限制如何调整?
    抖音抖店API请求获取宝贝详情数据的调用频率限制通常无法直接由开发者自行随意调整,以下是一些相关的情况和可能的途径:一、遵循平台既定规则:首先要明确抖音开放平台针对不同的API接口、开发者账号类型以及业务场景等设定了固定的调用频率限制标准。开发者必须严格遵守这些......
  • 从本地到云端:跨用户请求问题的完美解决方案
    对于某些单个请求或响应中含有多个用户信息的服务,SDK提供了一套基于统一的UCS拆分和聚合的解决方案供开发者使用。请求拆分对于跨用户服务的请求,我们提供了两个处理方案:【1】根据用户信息拆分请求:场景:请求内含有对应多个用户的对象列表。例如批量查询,批量匹配订单进行批......
  • 08-Flask中实现跨域请求
    为什么需要支持跨域浏览器的同源策略(Same-Origin Policy)限制了跨域请求,如果不进行特殊处理,跨域请求将被浏览器拦截。场景注意出现在前后的分离项目、第三方API等场景,接口支持跨域能够允许浏览器跨域请求不被浏览器拦截,让前端应用能够安全地请求不同域的资源,绕过浏览器的同源策......
  • 请求放入对象列表中
    好的,你想要将解析到的GET请求包含的信息放到一个对象列表中,这样可以更方便地管理和使用这些信息。你可以定义一个包含URL、请求参数及其名称和请求格式的类,然后将解析到的信息存储到该类的对象列表中。首先,定义一个类来存储GET请求的信息:importjava.util.Map;publicclassAp......
  • HttpClient请求结果
    好的,你想要循环遍历对象列表,对每个GET请求执行HTTP请求,并检查响应状态码是否为200。如果状态码不是200,就打印出响应体。为了实现这个功能,可以使用HttpClient库,它更现代和灵活。以下是一个示例代码,演示如何实现上述需求:首先,添加依赖(如果你使用Maven),在pom.xml中添加HttpClient库......
  • 为什么 Spring Boot 的微服务架构被称为“现代应用开发的曙光”?这种设计真的解决了传
    目录1.微服务架构为何被称为“现代应用开发的曙光”1.1单体架构的问题1.2微服务架构的诞生与发展1.3微服务架构的挑战2.SpringBoot在微服务中的角色2.1自动化配置与微服务开发2.2SpringCloud生态中的微服务3.微服务架构是否真的解决了传统单体架构中的所......
  • Vue axios发送请求
    Vue发送请求下载axios插件npminstallaxios-S具体操作:functionget(){//请求地址,参数,请求头;then是处理返回结果axios.get("http://localhost:8080/hello",{params:{},headers:{}}).then(res=>console.log(res));}fu......
  • ThinkPHP怎么导入第三方类库
    ​ThinkPHP框架为PHP开发者提供了高效率、简单、安全的技术解决方案,其中包括方便的第三方类库导入功能。文章将指导你:1.了解Composer和ThinkPHP的关联;2.手动导入类库的步骤;3.使用Composer自动导入;4.调用第三方类库;5.避免常见错误。首先,我们需要了解Composer的基本功能和作用。1......
  • 【ECMAScript】ajax请求
    【ECMAScript】ajax请求 普通表单,默认会带上cookie$.ajax({url:'/test/getUserInfo',method:'POST',data:{'token':token},success:function(response){console.log('Success:',response);},er......