之前用Postman发请求的时候,有时候需要转代码就会直接转Unirest。现在习惯使用写测试用例来发送请求了。因为有很多需要签名或者加密的请求内容,使用代码来写请求就会比较方便。
那今天就来简单记录一下Unirest的POST请求和GET请求的写法。
首先导入Unirest的依赖:
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
然后就可以写代码了。先来一个POST请求:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("paramKey", "paramValue");
HttpResponse<String> response = Unirest.post("requestUrl")
.header("headerName", "headerValue")
.body(JSON.toJSONString(paramMap))
.asString();
System.out.println(response.getBody());
这就是一个简单的post请求的写法,如果加上签名、加密之类的就会比较复杂一些,但是测试接口的时候,就可以只修改参数,一步到位,不需要再把签名和加密后的参数复制到postman里,对返回的结果也可以进行一个处理测试。
写一个我自己实际用到的:
@Test
public void loginByPassword() throws UnirestException {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("phone", phone);
paramMap.put("password", MD5Utils.string2Md5(password));
String encryptParam = RSAUtils.buildRSAEncryptByPublicKey(JSON.toJSONString(paramMap), rsaPassportPublicKey);
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("data", encryptParam);
String sign = SignatureUtil.generate(secret(), dataMap, appId());
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post(host + "/passport/login/password")
.header("sign", sign)
.header("Content-Type", "application/json")
.body(JSON.toJSONString(dataMap))
.asString();
Map<String, String> resultMap = JSON.parseObject(response.getBody(), Map.class);
if (StringUtils.isNotBlank(resultMap.get("data"))) {
String result = RSAUtils.buildRSADecryptByPrivateKey(resultMap.get("data"), rsaPrivateKey());
System.out.println("密码登录:" + result);
}
}
这样签名、请求参数加密、响应参数解密都测试到了。而且每次请求只需要点一下运行,不需要手动生成签名和加密,测试效率提升了不少。
(由于历史原因,这里的签名不得不使用MD5,实际生产环境中如果使用了RSA加密的话,签名建议同样使用RSA)。
然后写一个简单的GET请求:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("paramKey", "paramValue");
HttpResponse<String> response = Unirest.get("requestUrl")
.header("headerName", "headerValue")
.queryString(paramMap)
.asString();
System.out.println(response.getBody());
其实跟POST请求区别很小,只是把Unirest.post(url)
改成Unirest.get(url)
,下面参数的.body(JSON.toJSONString(paramMap))
改成.queryString(paramMap)
就好了。
网友评论