zoukankan      html  css  js  c++  java
  • 【接口】HttpClient 处理get和post请求(二)(2019-07-14 18:41)

    一、环境准备

    1.导入httpClient依赖包

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

     导入fastJson依赖实现实体类序列化和json反序列操作

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.54</version>
    </dependency>

    testng依赖

    <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.8</version>
            <scope>test</scope>
    </dependency>

    二、Get请求发包代码实现

    package test;
    
    import java.util.Arrays;
    import java.util.HashMap;
    
    import org.apache.http.Header;
    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;
    import org.apache.http.util.EntityUtils;
    import org.testng.Assert;
    import org.testng.annotations.Test;
    
    import com.alibaba.fastjson.JSONObject;
    
    public class HttpClientTest {
        String url = "http://localhost:8081/user/login";
        String get_params = "username=xiaobing&password=123456";
        @Test
        public  void GetTest() {
            //创建HttpGet对象
            HttpGet httpGet = new HttpGet(url+"?"+get_params);
            //准备HttpClient客户端
            CloseableHttpClient httpClient =HttpClients.createDefault();
            CloseableHttpResponse httpResponse = null;
            try {
                //发送请求
                httpResponse  = httpClient.execute(httpGet);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //取出响应状态码
            int code = httpResponse.getStatusLine().getStatusCode();
            System.out.println("响应码:"+code);
            //取出消息头
            Header[] header = httpResponse.getAllHeaders();
            System.out.println("消息头:"+Arrays.toString(header));
            //取出响应报文
            String result = null;
            try {
                //使用EntityUtils工具类将Entity实体类toString转换
                result = EntityUtils.toString(httpResponse.getEntity());
                System.out.println("响应报文:"+result);
            } catch (Exception e) {
                e.printStackTrace();
            } 
            HashMap<String, String> map  = JSONObject.parseObject(result, HashMap.class);
            String actual = map.get("message");
            System.out.println("actual_message:"+actual);
            String expected = "登录成功";
            //断言
            Assert.assertEquals(actual, expected);
        }
    }
    响应码:200
    消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 14:06:44 GMT]
    响应报文:{"status":"1","message":"登录成功"}
    actual_message:登录成功
    PASSED: GetTest
    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================
    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================

    三、POST请求发包代码实现(表单方式)

    服务端:

    @RestController//控制器类
    @RequestMapping("/user")//映射路径
    public class UserController {
        @RequestMapping(value="/login",method=RequestMethod.POST,consumes="application/x-www-form-urlencoded")
        public Result login(User user) {
       。。。 。。。
    }

    客户端:

    @Test
    public void postFormSend() {
        //测试数据准备
        String url = "http://localhost:8081/user/login";
        String params = "username=xiaobing&password=123456";
        //创建HttpPost对象
        HttpPost httpPost = new HttpPost(url);
        //将Content-Type类型添加到消息头
        Header header = new BasicHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
        httpPost.addHeader(header);
        //将表单参数添加到Entity实体类放到请求体
        HttpEntity entity = new StringEntity(params, "UTF-8");
        httpPost.setEntity(entity);
        //准备HttpClient客户端
        CloseableHttpClient httpClient =HttpClients.createDefault();
        CloseableHttpResponse httpResponse = null;
        try {
            //发起请求
            httpResponse =httpClient.execute(httpPost);
        } catch (Exception e) {
            e.printStackTrace();
        } 
        int code = httpResponse.getStatusLine().getStatusCode();
        System.out.println("响应码:"+code);
        Header[] resHeader = httpResponse.getAllHeaders();
        System.out.println("消息头:"+Arrays.toString(resHeader));
        HttpEntity httpEntity = httpResponse.getEntity();
        String result = null;
        try {
            result = EntityUtils.toString(httpEntity);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("响应报文:"+result);
        HashMap<String, String> map  = JSONObject.parseObject(result, HashMap.class);
        String actual = map.get("message");
        System.out.println("actual_message:"+actual);
        String expected = "登录成功";
        //断言
        Assert.assertEquals(actual, expected);
        
    }
    响应码:200
    消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 15:13:53 GMT]
    响应报文:{"status":"1","message":"登录成功"}
    actual_message:登录成功
    PASSED: postFormSend
    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================
    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================

    四、POST请求发包代码实现(Json方式)

    服务端:

    @RestController//控制器类
    @RequestMapping("/user")//映射路径
    public class UserController {
        @RequestMapping(value="/login",method=RequestMethod.POST,consumes="application/json")
        public Result login(@RequestBody(required=false)User user) {
    。。。 。。。
    }

    客户端:

    @Test
    public void postJsonSend() {
        //测试数据准备
        String url = "http://localhost:8081/user/login";
        String params = "{"username":"xiaobing","password":"123456"}";
        //创建HttpPost对象
        HttpPost httpPost = new HttpPost(url);
        //将Content-Type类型添加到消息头
        Header header = new BasicHeader("Content-Type","application/json;charset=utf-8");
        httpPost.addHeader(header);
        //将表单参数添加到Entity实体类放到请求体
        HttpEntity entity = new StringEntity(params, "UTF-8");
        httpPost.setEntity(entity);
        //准备HttpClient客户端
        CloseableHttpClient httpClient =HttpClients.createDefault();
        CloseableHttpResponse httpResponse = null;
        try {
            //发起请求
            httpResponse =httpClient.execute(httpPost);
        } catch (Exception e) {
            e.printStackTrace();
        } 
        int code = httpResponse.getStatusLine().getStatusCode();
        System.out.println("响应码:"+code);
        Header[] resHeader = httpResponse.getAllHeaders();
        System.out.println("消息头:"+Arrays.toString(resHeader));
        HttpEntity httpEntity = httpResponse.getEntity();
        String result = null;
        try {
            result = EntityUtils.toString(httpEntity);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("响应报文:"+result);
        HashMap<String, String> map  = JSONObject.parseObject(result, HashMap.class);
        String actual = map.get("message");
        System.out.println("actual_message:"+actual);
        String expected = "登录成功";
        //断言
        Assert.assertEquals(actual, expected);
        
    }
    响应码:200
    消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 15:18:53 GMT]
    响应报文:{"status":"1","message":"登录成功"}
    actual_message:登录成功
    PASSED: postJsonSend
    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================
    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================

    五、代码整合

    未完待续。。。

  • 相关阅读:
    国家行政区划地区编码表
    Java循环中标签的作用(转)
    通过ribbon 根据服务名获取所有服务实例的IP和端口列表
    rabbitmq重装依赖的erlang 要注意
    Rabbitmq关于集群节点功能的读书笔记
    CentOS7统计某个进程当前的线程数
    理解同步、异步、阻塞、非阻塞(传送门)
    代理模式和装饰模式区别
    【转载】Asp.Net生成图片验证码工具类
    【转载】使用宝塔Linux面板屏蔽某些IP访问你的服务器
  • 原文地址:https://www.cnblogs.com/xiaozhaoboke/p/11185270.html
Copyright © 2011-2022 走看看