【接口】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 ...
随机推荐
- Shell系列(11)- 位置参数变量(4)
作用 往shell脚本里面传递参数 位置参数变量 作用 $n n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10} $* 这个变量代表命令行中 ...
- Linux系列(29) - rpm包命名规则(1)
RPM包命名规则 例如包名:httpd-2.2.15-15.el6.centsos.1.i686.rpm 软件包名-httpd 软件版本-2.2.15 发布的次数-15 el6.centos适合的Li ...
- Jenkins无法登陆解决方案
Jenkins-2.204.1 版本 创建jenkins用户时,没填full name,且选择了使用系统的admin登录或者是admin登录只是改了admin的登录密码导致登录不上去(Invalid ...
- IdentityServer4系列[6]授权码模式
授权码模式是一种混合模式,是目前功能最完整.流程最严密的授权模式.它主要分为两大步骤:认证和授权.其流程为: 用户访问客户端,客户端将用户导向Identity Server. 用户填写凭证信息向客户端 ...
- Winform 实现图片轮播(解决Image.FromFile内存不足)
前言 最近项目中需要在winform中做一个类似于网页那种轮播的效果,这里做下记录. 实现 整体的实现思路如下: 读取图片文件夹. 建立一个集合存储Image对象. 定时器定时更换PictrueBox ...
- 数据库建表权限 CREATE command denied to user for table
今天在表中用Navicat连接服务器上的mysql账号进行建表,报了个这样类似的错, CREATE command denied to user for table 是数据库权限设置的问题,所以无法进 ...
- Spring源码阅读一
引导: 众所周知,阅读spring源码最开始的就是去了解spring bean的生命周期:bean的生命周期是怎么样的呢,见图知意: 大致流程: 首先后通过BeanDefinitionReader读取 ...
- gRPC,爆赞
原文链接: gRPC,爆赞 gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用. 作为一名程序员,学就对了. 之前用 Python 写过一些 gRPC 服务, ...
- 如何迁移 Spring Boot 到函数计算
作者 | 田小单 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上 ...
- iOS自定义拍照框拍照&裁剪(一)
卡片机时代 很重要的一点是,相机本身是没有方向概念的,它不理解拍摄的内容,只会以相机自己的坐标系去保存数据,下图展示了相机对"F"进行四个角度拍摄时返回的图片数据. 最初的卡片机时 ...