【接口】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 ...
随机推荐
- Linux系列(5) - 目录处理命令(2)
删除空目录: rmdir rmdir [目录名] 删除文件或目录: rm rm -rf [文件或目录] 选项 -r 删除目录 -f 强制 ...
- javascript LinkedList js 双向循环链表 Circular Linked List
javascript LinkedList: function Node(elem, prev, next) { this.elem = elem; this.prev = prev ? prev : ...
- jmeter性能实战
概述 性能测试: 通过并发工具请求服务器,提前发现性能问题,优化并解决 为什么做性能测试? 常规需求 用户反馈性能问题 项目对性能不放心 性能测试的最终目标:? 性能指标分析 多快好省 项目性能场景提 ...
- 软件开发的V模型
原文来自:http://www.51testing.com/html/67/n-3723567.html 软件开发的V模型大家都不陌生,其中测试阶段分为单元测试->功能测试->系统测试-& ...
- Centos7创建swap分区
创建4g swap分区 dd if=/dev/zero of=/var/swap bs=1024 count=4194304 mkswap /var/swap 激活swap分区 swapon /var ...
- YbtOJ#752-最优分组【笛卡尔树,线段树】
正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 \(n\)个人,每个人有\(c_i\)和\(d_i\)分别表示这个人所在的队伍的最少/最多人数. 然后 ...
- Dapr + .NET Core实战(十一)单机Dapr集群负载均衡
如何单机部署Dapr集群 第十篇讲过了K8S集群下如何使用Dapr运行程序,但是很多人一直在问如何单机下进行Dapr的负载,这节课我们来聊聊如何单机进行Dapr的负载. 首先要说的是单机下,通过 da ...
- openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
最近用传统的方式 生成的证书上用golang 1.15. 版本 报 grpc 上面 ➜ ~ go version go version go1.15.3 darwin/amd64 上面调用的时候报错了 ...
- 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容
作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...
- NOIP模拟76
前言 还有不到 10 天就要 CSP-S ...马上我就要有我的第一篇游记了. 今天考试莽了一回,整了大概 2.5h 的 T1 ,可能是因为今天题目比较难,看起来成效不错. 以后还是要注意时间的分配( ...