一.HttpClient、JsonPath、JsonObject运用
HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.html
1.使用httpclient进行接口测试,所需jar包如下:httpclient.jar、 httpcore.jar、 commons-logging.jar
2.使用JSONObject插件处理响应数据
所需的6个JAR包:json-lib.jar、commons-beanutils.jar、commons-collections.jar、ezmorph.jar、commons-logging.jar、commons-lang.jar
3.使用正则表达式匹配提取响应数据
public class UserApiTest {
private static CloseableHttpClient httpClient = null;
@BeforeClass
public static void setUp(){
httpClient = HttpClients.createDefault(); //创建httpClient
}
@AfterClass
public static void terDown() throws IOException{
httpClient.close();
}
/*
* 使用httpclient进行接口测试,所需jar包如下:
*httpclient.jar、 httpcore.jar、 commons-logging.jar
*get请求
**/
@Test
public void userQueryWithRegTest1() throws ClientProtocolException, IOException{
HttpGet request = new HttpGet("url地址"); // 创建请求
//设置请求和连接超时时间,可以不设置
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout().setConnectTimeout().build();
request.setConfig(requestConfig); //get请求设置请求和传输超时时间
CloseableHttpResponse response = httpClient.execute(request); //执行请求
String body = EntityUtils.toString(response.getEntity());
response.close(); //释放连接
System.out.println(body);
//获取响应头信息
Header headers[] = response.getAllHeaders();
for(Header header:headers){
System.out.println(header.getName()+": "+header.getValue());
}
// 打印响应信息
System.out.println(response.getStatusLine().getStatusCode());
}
/*
* 使用httpclient进行接口测试,所需jar包如下:
*httpclient.jar、 httpcore.jar、 commons-logging.jar
*get请求
**/
@Test
public void testPost1() throws ClientProtocolException, IOException{
HttpPost request = new HttpPost("http://101.200.167.51:8081/fund-api/expProduct");
//设置post请求参数
List<NameValuePair> foramParams = new ArrayList<NameValuePair>();
foramParams.add(new BasicNameValuePair("name", "新手体验"));
foramParams.add(new BasicNameValuePair("yieldRate", ""));
foramParams.add(new BasicNameValuePair("extraYieldRate", ""));
foramParams.add(new BasicNameValuePair("duration", ""));
foramParams.add(new BasicNameValuePair("minBidAmount", ""));
foramParams.add(new BasicNameValuePair("maxBidAmount", ""));
UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(foramParams, "UTF-8");
request.setEntity(urlEntity); //设置POST请求参数
CloseableHttpResponse response = httpClient.execute(request); //执行post请求
String body = EntityUtils.toString(response.getEntity());
response.close(); //释放连接
System.out.println(body);
JSONObject jsonObj = JSONObject.fromObject(body);
System.out.println("是否成功:"+jsonObj.getString("msg").equals("成功"));
}
/*
* 用正则表达式提取响应数据
* */
@Test
public void userQueryWithRegTest2() throws ClientProtocolException, IOException{
HttpGet request = new HttpGet("url地址"); // 创建请求
CloseableHttpResponse response = httpClient.execute(request); // 执行某个请求
String body = EntityUtils.toString(response.getEntity()); // 得到响应内容
response.close();
System.out.println(body);
// "nickname":"([a-zA-Z0-9]*)"
Pattern pattern = Pattern.compile("\"mobile\":\"(\\d+)\",\"nickname\":\"([a-zA-Z0-9]*)\".*\"status\":(\\d)"); // 从正则表达式得到一个模式对象
Matcher matcher = pattern.matcher(body);// 对响应内容进行匹配
while (matcher.find()) {
String group0 = matcher.group(); // **_g0
String group1 = matcher.group(); // **_g1
String group2 = matcher.group(); // **_g1
String group3 = matcher.group(); // **_g1
System.out.println(group0 + "\t" + group1 + "\t" + group2 + "\t" + group3);
}
}
/*
* 使用JsonPath提取json响应数据中的数据
* 需要的jar包:json-path-2.2.0.jar
*/
@Test
public void userQueryWithRegTest3() throws ClientProtocolException, IOException{
HttpGet request = new HttpGet("url地址"); // 创建请求
CloseableHttpResponse response = httpClient.execute(request); // 执行某个请求
String body = EntityUtils.toString(response.getEntity()); // 得到响应内容
response.close();
System.out.println(body);
ReadContext ctx = JsonPath.parse(body);
String mobile = ctx.read("$.data.mobile");
String nickname = ctx.read("$.data.nickname");
int status = ctx.read("$.data.status");
String avatar = ctx.read("$.data.avatar");
System.out.println(mobile + "\t" + nickname + "\t" + status + "\t" + avatar);
}
/*
* 使用JSONObject插件处理响应数据
* 所需的6个JAR包:json-lib.jar、commons-beanutils.jar、commons-collections.jar、ezmorph.jar、commons-logging.jar、commons-lang.jar
*/
@Test
public void userQueryWithRegTest5() throws ClientProtocolException, IOException{
HttpGet request = new HttpGet("url地址"); // 创建请求
CloseableHttpResponse response = httpClient.execute(request); // 执行某个请求
String body = EntityUtils.toString(response.getEntity()); // 得到响应内容
response.close();
//将响应的字符串转换为JSONObject对象
JSONObject jsonObj = JSONObject.fromObject(body);
System.out.println(jsonObj.getString("code").equals(""));
//data是对象中的一个对象,使用getJSONObject()获取
JSONObject jsonObj1 = jsonObj.getJSONObject("data");
System.out.println("status:"+jsonObj1.getInt("status")+"\n"+"nickname:"+jsonObj1.getString("nickname"));
}
/*
* java代码转换json
* 需要的jar包:json-lib
* */
@Test
public void testJavaToJson(){
System.out.println("--------------------------------------------------------------");
System.out.println("java代码封装为json字符串:");
JSONObject jsonObj = new JSONObject();
jsonObj.put("username", "张三");
jsonObj.put("password", "");
System.out.println("java--->json: "+jsonObj.toString());
System.out.println("--------------------------------------------------------------");
}
/*
* json字符串转xml字符串
* 需要的jar包:json-lib;xom
* */
@Test
public void testJsonToXml(){
System.out.println("--------------------------------------------------------------");
System.out.println("json转xml字符串");
String jsonStr = "{\"username\":\"张三\",\"password\":\"123456\"}";
JSONObject jsonObj = JSONObject.fromObject(jsonStr);
XMLSerializer xmlSerializer = new XMLSerializer();
// 设置根元素名称
xmlSerializer.setRootName("user_info");
// 设置类型提示,即是否为元素添加类型 type = "string"
xmlSerializer.setTypeHintsEnabled(false);
String xml = xmlSerializer.write(jsonObj);
System.out.println("json--->xml: "+xml);
System.out.println("--------------------------------------------------------------");
}
/*
* xml字符串转json字符串
* 需要的jar包:json-lib;xom
* */
@Test
public void testXmlToJson(){
System.out.println("--------------------------------------------------------------");
System.out.println("xml字符串转json字符串");
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><user_info><password>123456</password><username>张三</username></user_info>";
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json= xmlSerializer.read(xml); //JSON是JSONObject的String形式
System.out.println("xml---->json:"+json);
System.out.println("--------------------------------------------------------------");
}
/*
* javaBean转json
* 需要的jar包:json-lib
* */
@Test
public void testJavaBeanToJson(){
System.out.println("--------------------------------------------------------------");
System.out.println("javaBean转json");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("张三");
userInfo.setPassword("");
JSONObject JsonObj = JSONObject.fromObject(userInfo);
System.out.println("javaBean--->json:"+JsonObj.toString());
System.out.println("--------------------------------------------------------------");
}
/*
* javaBean转xml
* 需要的jar包:json-lib;xom
* */
@Test
public void testJavaBeanToXml(){
System.out.println("--------------------------------------------------------------");
System.out.println("javaBean转xml");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("张三");
userInfo.setPassword("");
JSONObject JsonObj = JSONObject.fromObject(userInfo);
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setRootName("user_info");
String xml = xmlSerializer.write(JsonObj, "UTF-8");
System.out.println("javaBeanToXml--->xml:"+xml);
System.out.println("--------------------------------------------------------------");
}
}
补充:
/*
*使用 java.net.URL.URL请求
* */
@Test
public void useJavaUrl(){
String httpUrl = "http://apis.baidu.com/showapi_open_bus/mobile/find";
String httpArg = "num=13901452908";
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
httpUrl = httpUrl + "?" + httpArg; try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
// 填入apikey到HTTP header
connection.setRequestProperty("apikey", "f584d68b4aebca91c154bffd397e05cd");
connection.connect();
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
reader.close();
result = sbf.toString();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(result);
}
UserInfo:
public class UserInfo {
public String username;
public String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
一.HttpClient、JsonPath、JsonObject运用的更多相关文章
- java http 请求的工具类
/*** Eclipse Class Decompiler plugin, copyright (c) 2016 Chen Chao (cnfree2000@hotmail.com) ***/pack ...
- 基于HttpClient JSONObject与JSONArray的使用
package com.spring.utils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.ap ...
- 基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架
接口自动化框架 项目说明 本框架是一套基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport而设计的数据驱动接口自动化测试框架,TestNG ...
- Java测试开发--JSONPath、JSONArray、JSONObject使用(十)
一.Maven项目,pom.xml文件中导入 <dependency> <groupId>com.alibaba</groupId> <artifactId& ...
- JsonPath入门教程
有时候需要从json里面提取相关数据,必须得用到如何提取信息的知识,下面来写一下 语法格式 JsonPath 描述 $ 根节点 @ 当前节点 .or[] 子节点 .. 选择所有符合条件的节点 * 所有 ...
- HttpClient相关
HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...
- httpClient实现微信公众号消息群发
1.实现功能 向关注了微信公众号的微信用户群发消息.(可以是所有的用户,也可以是提供了微信openid的微信用户集合) 2.基本步骤 前提: 已经有认证的公众号或者测试公众账号 发送消息步骤: 发送一 ...
- 使用httpclient 调用selenium webdriver
结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...
- httpclient 使用方式介绍
第一:Get方式请求 package com.hct; import java.io.BufferedReader; import java.io.IOException; import java.i ...
随机推荐
- ASP.NET MVC:多语言的三种技术处理策略
ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...
- 在路由器上搭建SVN服务器
在路由器上搭建SVN服务器 SVN托管服务大家都不陌生了,我最早开始用的是谷歌提供的SVN,因为在上面托管的项目都是开源的,所以当有些项目不方便在网上公开的时候,就需要自己搭建SVN服务器了.wind ...
- Haskell 笔记(四)函数系统
函数系统 函数式编程当然少不了函数系统啦,在教程最初的时候就有一个最简单的函数,函数系统贯穿在Haskell全部,Haskell的函数有几个重要的性质. 首先声明一下函数的参数和返回值类型 然后有一个 ...
- C++利用不完全实例化来获得函数模板参数的返回值和参数
有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数.如在boost中的signal和slot机制,就存在这样情况. 那么,我们如何得到这些信息呢? 我们使用C++不完全实例化来实现. ...
- 结构-行为-样式-JqueryUI拖放使用实例(全)
最近工作中有个需要是动态配置页面,想到之前公司有做过类似的,用的是JqueryUi,所以就看了下它的Api.下面就是我做的小Demo,想用的同学可以参考: Html: <div class=&q ...
- 构建jenkins
一.Jenkins简介: jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用户监控秩序重复的工作,包括: 1>持续的软件版本发布测试项目. 2>监控外部调 ...
- Python 调用shell
第一种,os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回.返回值是依赖于系统的,直接返回系统的调用返回 ...
- 遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了
遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了 找了一下午没解决.
- JAVA-代理学习一之JDK实现
代理的实现依赖于反射,建议不太懂反射的童鞋先看看反射相关的知识点. 代理可以理解为对实际调用方法的一种能力的加强. 代理分为静态代理和动态代理: <1> 静态代理示例 接口MyInterf ...
- C# CacheHelper
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...