一、环境准备

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
===============================================

五、代码整合

未完待续。。。

【接口】HttpClient 处理get和post请求(二)(2019-07-14 18:41)的更多相关文章

  1. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  2. Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)

    讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...

  3. C# ASP.NET Core使用HttpClient的同步和异步请求

    引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string status ...

  4. Android笔记---使用HttpClient发送POST和GET请求

    在Android上发送 HTTP 请求的方式一般有两种, HttpURLConnection 和 HttpClient,关于HttpURLConnection的使用方法能够參考HTTP之利用HttpU ...

  5. (办公)访问其他系统接口httpClient,异步访问

    访问其他系统接口httpClient,但是都是同步的,同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请求可以同时塞入缓冲区,不阻塞当前的线程; httpClient请 ...

  6. 使用HttpClient来异步发送POST请求并解析GZIP回应

    .NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...

  7. java 封装httpclient 的get 和post 请求

    import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.util. ...

  8. Java实现HttpClient发送GET、POST请求(https、http)

    1.引入相关依赖包 jar包下载:httpcore4.5.5.jar    fastjson-1.2.47.jar maven: <dependency> <groupId>o ...

  9. HTTPClient模拟Get和Post请求

    一.模拟Get请求(无参) 首先导入HttpClient依赖 <dependency> <groupId>org.apache.httpcomponents</group ...

随机推荐

  1. csv或excel的utf-8乱码问题

    方法1.数据导入 打开 Excel,执行"数据"->"自文本",选择 CSV 文件,出现文本导入向导,选择"分隔符号",下一步,勾选& ...

  2. Android命令行启动模拟器

    我们在平时的开发中会经常需要使用模拟器进行调试,这个时候我们就要先打开Android Studio来启动模拟器,然后再运行App.这个流程中启动Android Studio需要花费一些时间,而模拟器的 ...

  3. 封装excel导出方法

    封装读取excel内容方法 /** * 获取Excel内容 * @param type $filename * @return type */ public function getExcelCont ...

  4. P5934-[清华集训2012]最小生成树【最小割】

    正题 题目链接:https://www.luogu.com.cn/problem/P5934 题目大意 给出\(n\)个点\(m\)条边的一张图,再加入一条边\((u,v,L)\)求至少删掉多少条边可 ...

  5. Ybt#452-序列合并【期望dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/113/problem/2 题目大意 一个空序列,每次往末尾加入一个\([1,m]\)中的随机一个数.如果末尾两个数相 ...

  6. git批量处理git author和commit

    最近在做自己项目的时候,由于使用了git全局配置的用户名和邮箱,导致自己私人的仓库里面的所有提交记录都是用的公司的邮箱和用户名,于是想批量替换一下. 可以在需要修改的项目的根目录下使用如下命令,进行批 ...

  7. spring boot处理跨域请求代码

    @Configuration @WebFilter(filterName = "CorsFilte") public class CorsFilter implements Fil ...

  8. c++ 的学习 构造函数1

    1. 构造函数(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作 2.一旦自定义了构造函数,必须用其中一个自定义的构造函数来初始化对象 就是有多个的话    根据参数编译器自行选 ...

  9. 修改MySql Root密码(包含忘记密码的方式)

    曾几何时,我也是记得MySQL root密码的人,想要修改root密码还不是轻而易举的事?下面前三种修改改方式都是在记得密码的情况下进行修改,如果你忘记了原本的root,请直接跳至 终极 第一种: 在 ...

  10. IL合集

    由于之前写的表达式树合集,未编写任何注释且是以图片的形式展现给大家,在这里向各位看官道歉了,接下来为大家奉上新鲜出炉的香喷喷的IL合集,后面会持续更新,各位看官点关注不迷路,之前答应的手写IOC以及多 ...