【接口】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
===============================================
五、代码整合
未完待续。。。
【接口】HttpClient 处理get和post请求(二)(2019-07-14 18:41)的更多相关文章
- Java学习心得之 HttpClient的GET和POST请求
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...
- C# ASP.NET Core使用HttpClient的同步和异步请求
引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string status ...
- Android笔记---使用HttpClient发送POST和GET请求
在Android上发送 HTTP 请求的方式一般有两种, HttpURLConnection 和 HttpClient,关于HttpURLConnection的使用方法能够參考HTTP之利用HttpU ...
- (办公)访问其他系统接口httpClient,异步访问
访问其他系统接口httpClient,但是都是同步的,同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请求可以同时塞入缓冲区,不阻塞当前的线程; httpClient请 ...
- 使用HttpClient来异步发送POST请求并解析GZIP回应
.NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...
- java 封装httpclient 的get 和post 请求
import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.util. ...
- Java实现HttpClient发送GET、POST请求(https、http)
1.引入相关依赖包 jar包下载:httpcore4.5.5.jar fastjson-1.2.47.jar maven: <dependency> <groupId>o ...
- HTTPClient模拟Get和Post请求
一.模拟Get请求(无参) 首先导入HttpClient依赖 <dependency> <groupId>org.apache.httpcomponents</group ...
随机推荐
- Jmeter系列(1) - 踩坑之代理服务器录制失败
前景 Jmeter代理服务器报错信息如下.Jmeter录制不成功 解决方案 需了解 代理服务器启动后会在/bin目录生成ApacheJMeterTemporaryRootCA.crt和ApacheJM ...
- Linux python 虚拟环境管理
直接复制的内容: 原著:https://www.cnblogs.com/q767498226/p/11099884.html 报错解决:https://blog.csdn.net/weixin_467 ...
- 如何把springboot项目部署到tomcat上
前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以 ...
- NOIP 模拟六 考试总结
T1辣鸡 T1就搞得这莫不愉快.. 大致题意是给你几个矩形,矩形覆盖的点都标记上,每个矩形无重复部分,求满足(x,y) (x+1,y+1)都标记过的点对数,范围1e9. 看起来很牛的样子,我确实也被1 ...
- 数据库MySQL主从-GTID
1.第一步在主服务器上/etc/my.cnf/下添加 log-bin=log-bin server-id=1 gtid_mode=ON enforce_gtid_consistency 2.第二步:重 ...
- 演员 Or 开发者的自我修养
演员 Or 开发者的自我修养 时至今日,我都还是很怀念小时候与一群玩伴编写剧本.拍摄,那时候的我还有一个远大的"白日梦"--成为一名导演.很可惜,终究是"白日梦" ...
- 5 大场景深度探讨何为 Serverless 架构模式?
作者 | Hongqi 阿里云高级技术专家 究竟什么是 Serverless 架构? 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架 ...
- 开发函数计算的正确姿势——OCR 服务
作者 | 杜万(倚贤) 阿里云技术专家 简介 首先介绍下在本文出现的几个比较重要的概念: OCR(光学字符识别):光学字符识别(Optical Character Recognition, OCR)是 ...
- VS Code Just My Code Debugging
VS Code Just My Code Debugging VS Code for C++ doesn't support Just My Code Refer here: Add support ...
- CSS引入字体文件
在css引入字体文件可以直接把以下代码复制到css文件中 /* 字体声明 */ @font-face {font-family: 'icomoon';src: url('fonts/icomoon.e ...