HttpClient-03.入门案例-发送POST方式请求

一.发送POST方式请求

编写代码:

1.创建一个HttpClient对象
2.创建一个HttpGet请求
3.发送http的get请求并获得响应对象
4.通过发送GET请求获取的CloseableHttpResponse响应对象来获取状态码以及响应数据
java 复制代码
package com.sky.test;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.common.utils.HttpUtil;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.UnsupportedEncodingException;

@SpringBootTest
public class HttpClientTest {

    /**
      测试以代码方式发送httpGet请求
     */
    @Test
    public void testGet() throws Exception{
        // 1.创建一个HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 2.创建一个HttpGet请求
        HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");

        // 3.发送http的get请求并获得响应对象
        CloseableHttpResponse response = httpClient.execute(httpGet);

        // 4.通过发送GET请求获取的CloseableHttpResponse响应对象来获取状态码以及响应数据
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务端返回的状态码为:"+statusCode);

        HttpEntity entity = response.getEntity();
        String body = EntityUtils.toString(entity);     // 响应体
        System.out.println("服务端返回的数据为:" + body);

        // 关闭资源
        response.close();
        httpClient.close();
    }

    /**
        测试以代码方式发送httpPost请求
     */
    @Test
    public void testPost() throws Exception {
        // 1.创建一个HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 2.创建一个HttpPost请求
        HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");

        JSONObject jsonObject = new JSONObject();   //  使用fastJSON包下的JSONObject对象来创建一个json格式的数据
        jsonObject.put("username","admin");
        jsonObject.put("password","123456");
        // 调用toString()方法将JSON格式的数据转为字符串
        StringEntity entity = new StringEntity(jsonObject.toString());   // StringEntity是HttpEntity的实现类,其构造方法要传入一个字符串,生成StringEntity类型的对象
        // 设置请求的编码方式为utf-8
        entity.setContentEncoding("utf-8");
        // 设置请求的数据格式为JSON
        entity.setContentType("application/json");
        // post请求要设置请求参数,为entity
        httpPost.setEntity(entity);     // setEntity()方法中要传入一个HttpEntity对象

        // 3.发送http的post请求并获得响应对象
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);

        // 4.通过发送POST请求获取的CloseableHttpResponse响应对象来获取状态码以及响应数据
        int statusCode = httpResponse.getStatusLine().getStatusCode();
        System.out.println("服务器返回的状态码为:" + statusCode);

        HttpEntity entity1 = httpResponse.getEntity();
        String body = EntityUtils.toString(entity1);    // 响应体
        System.out.println("服务器响应数据为" + body);

        // 关闭资源
        httpResponse.close();
        httpClient.close();
    }
}

首先创建一个HttpClient对象,CloseableHttpClient是HttpClient的一个实现类。然后我们创建一个HttpPost请求对象,并传入HttpPost请求的请求路径。

这里注意,我们使用HttpPost创建POST请求对象时,因为该POST请求要传入一个JSON格式的数据,封装用户名和密码。因此我们要设置请求参数,使用setEntity来设置请求参数entity。那么entity对象是怎么来的呢?首先使用JSONObject对象来创建一个json对象并为其赋值,然后将其转为字符串传入StringEntity的构造器中生成entity对象。并且指定entity对象的编码格式为utf-8,数据格式为json。

然后调用HttpClient对象的execute方法将HttpPost请求对象传入,发送http的get请求并获得响应对象。最后通过发送POST请求获取的CloseableHttpResponse响应对象来获取状态码以及响应数据。调用响应对象的.getStatusLine().getStatusCode()来获取响应状态码,然后调用getEntity()方法获取HttpEntity类型的响应体并转为String字符串。最后将响应对象和HttpClient对象关闭。

成功

请注意:运行时一定要保证项目启动和redis启动。

相关推荐
现在,此刻18 分钟前
leetcode 11. 盛最多水的容器 -java
java·算法·leetcode
DKPT1 小时前
Java设计模式之开闭原则介绍与说明
java·设计模式·开闭原则
hyy27952276841 小时前
企业级WEB应用服务器TOMCAT
java·前端·tomcat
布朗克1681 小时前
Spring Boot项目通过Feign调用三方接口的详细教程
java·spring boot·feign
Arva .1 小时前
Spring基于XML的自动装配
xml·java·spring
帅得不敢出门3 小时前
Android Framework定制长按电源键关机的窗口
android·java·framework
fatfishccc3 小时前
循序渐进学 Spring (上):从 IoC/DI 核心原理到 XML 配置实战
xml·java·数据库·spring·intellij-idea·ioc·di
小厂永远得不到的男人4 小时前
一篇文章搞懂 java 反射
java·后端
勇往直前plus4 小时前
一文学习nacos和openFeign
java·学习·微服务·openfeign
Warren984 小时前
公司项目用户密码加密方案推荐(兼顾安全、可靠与通用性)
java·开发语言·前端·javascript·vue.js·python·安全