一.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 ...
随机推荐
- JavaScript的基本类型总结
看了让你有收获的JavaScript的基本类型总结 Javascript是一种弱类型语言,没有明确的类型分类:网上分类的方式比较多,个人感觉不比去特别的追究细分是什么什么类型,若是能够明确的分出类 ...
- Python -- machine learning, neural network -- PyBrain 机器学习 神经网络
I am using pybrain on my Linuxmint 13 x86_64 PC. As what it is described: PyBrain is a modular Machi ...
- [C# 开发技巧]实现属于自己的截图工具
[C# 开发技巧]实现属于自己的截图工具 一.引言 之前一直都是写一些C#基础知识的内容的,然而有些初学者可能看完了这些基础知识之后,会有这样一个疑惑的——我了解了这些基础知识之后,我想做一些工具怎么 ...
- 【Linux】CentOS 学习笔记之一(安装配制)
如何打开命令窗口:应用程序>系统工具>终端 如何获取root 权限:在终端下,输入su 再输入密码(密码不显示在屏幕上) 如何将英文版转换成中文: [root@localhost ~]# ...
- 以helloworld为例讲解magento中控制器的工作
1.下面介绍的前提是你已经安装了magento ,版本是1.9.1.0. 2.下面是实际步骤 ①在工程下面创建下面的文件目录 app/code/local/Magentotutorial/Hellow ...
- 我的 MarkDown 学习笔记
MarkDown 一种用于写作的轻量级[标记语言].它用简洁的语法代替排版,而不像一般的文字处理软件 Word 或者 Pages 有大量的排版.字体设置等. 如果你对文章的样式没有太多要求,只注重写文 ...
- 关于Ueditor 前后端分离实现文件上传到独立服务器的问题 望大神们赐教
最近,由于网站实现多台服务器负载均衡,导致编辑器上传文件需要同步,可是使用同步软件太慢,不太现实,所以想到实现编辑器上传文件直接上传到独立文件服务器.可是没想到遇到坑了. 1.在本地IIS 中添加网站 ...
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
之前我有博客也尝试过使用redis,在实际的项目中确实作用挺大的.至少对于数据的频繁读取来说都起着至关重要的作用. 但是随着技术的学习,慢慢的业务要复杂起来,以后也许会用到redis集群,所以在这边查 ...
- python绝技 — 侦听802.11 Probe请求
代码 #!/usr/bin/python #--*--coding=utf-8--*-- from scapy.all import * interface = 'wlan1' probeReqs = ...
- 获取select选中的值
$("#CalibrationYear option:selected").text();