java接口自动化demo_第一个java 接口自动化程序
第一个Java实现的接口测试
御都
字数 1065 · 阅读 0
2019-04-09 08:14
一、背景
使用HttpClient框架提交一个post&get申请,并对打印出返回值和状态码
二、操作步骤
1、在eclipse中创建一个maven工程,设置依赖关系
1.1 使用maven工程的原因:在pom.xml中设置依赖关系后会自动下载相应版本的jar包,减少了人工查找和安装jar包的步骤。
1.2 设置依赖关系
实质上就是将需要使用到的某个版本的jar包挂在该工程下,使得该工程下的类都能导入该jar包中的类进行使用。
【设置的具体内容】
org.apache.httpcomponents
httpclient
4.5.2
【设置后的效果】
在Maven Dependencies下能够看到该版本的http jar包
image.png
1.3代码
package com.cn;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class Demo {
public static void main(String[] args) {
doGet();
}
private static void doGet() {
String url = "https://edu.csdn.net/course/detail/3328";
//准备参数
List param = new ArrayList();
/*BasicNameValuePair pwd = new BasicNameValuePair("pwd","123456");
BasicNameValuePair phoneN = new BasicNameValuePair("phoneN","15284691234");
param.add(pwd);
param.add(phoneN);*/
/*BasicNameValuePair tn = new BasicNameValuePair("tn","62095104_8_oem_dg");
param.add(tn);
//参数转换为字符串
String paramStr = URLEncodedUtils.format(param, "UTF-8");
//拼接url
url += "?"+paramStr;*/
System.out.println("url为:"+url);
//创建Get对象
HttpGet get = new HttpGet(url);
//创建客户端对象
CloseableHttpClient client = HttpClients.createDefault();
try {
//提交get请求,client调用execute方法会要求抛出try cathch的异常
CloseableHttpResponse response = client.execute(get);
//获取状态码
int code = response.getStatusLine().getStatusCode();
//获取返回值信息
String result = EntityUtils.toString(response.getEntity());
System.out.println("返回码为:"+code);
System.out.println("返回内容为:"+result);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
【报错 SSLHandshakeException】
url为:https://edu.csdn.net/course/detail/3328
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at com.cn.Demo.doGet(Demo.java:47)
at com.cn.Demo.main(Demo.java:19)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
... 21 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
... 27 more
public static CloseableHttpClient createSSLClientDefault() {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
【修改后的代码如下】
package interfaceDemo;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class Demo1 {
public static void main(String[] args) {
String url = "https://news.cnblogs.com/";
get(url);
}
public static void get(String url){
//创建一个get对象
HttpGet get = new HttpGet(url);
//创建一个client对象
CloseableHttpClient client = createSSLClientDefault();
try {
//使用client对象发送get请求
HttpResponse respons = client.execute(get);
//获取响应的结果
HttpEntity entity = respons.getEntity();
//将响应结果转换为字符串
String result = EntityUtils.toString(entity,"utf-8");
System.out.println("响应结果为:"+result);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static CloseableHttpClient createSSLClientDefault() {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
}
【运行结果】
一个html,截取了开头的部分
响应结果为:
IT新闻 - 博客园
【遗留_关于证书】
1、为什么会有证书这个东西呢?通过浏览器访问百度的网址时,没看到证书的相关东西
2 所有网址都需要证书吗?
3 上面那种解决方案是属于信任所有证书吗?还有其他解决方法吗?代码怎么写?
java接口自动化demo_第一个java 接口自动化程序相关推荐
- 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么? welcome.java: import javax.swing.*; public class w ...
- 便携式液晶驱动板卡方案可支持1080P能驱动 HBR 4LANE EDP 接口的液晶面板有一个 miniHDMI 接口,两个 Type-C 信号接口。支持 HDR 高动态。
AP2KS REV1.1 是一款多功能便携式液晶显示器驱动板卡,可支持最高分辨率 2560*1600@60Hz, 能驱动 HBR 4LANE EDP 接口的液晶面板. 拥有一个 miniHDMI 接口 ...
- 一个java类可以有_一个.java文件中可以有几个同级类?
1.在一个.java文件中可以有多个同级类(和public一样的位置,注意不是内部类).其修饰符只可以public/abstract/final/和无修饰符,不能是其他的protected/priva ...
- 【Java】我的第一个 JAVA 程序:Hello,world!
Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...
- java命令行参数_一个 java 命令行参数顺序的坑
tream Stream是在Java SE 8 API添加的用于增强集合的操作接口,可以让你以一种声明的方式处理集合数据.将要处理的集合看作一种流的创建者,将集合内部的元素转换为流并且在管道中传输, ...
- java string最大长度_一个Java字符串中到底有多少个字符?
作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...
- 小汤学编程之JAVA基础day01——JAVA基本概念、第一个JAVA程序
一.JAVA的概念 1.名字的由来 2.java之父 3.java的分类 4.虚拟机跨平台原理 二.第一个JAVA程序 1.编译环境 2.环境变量 3.用黑 ...
- java有几大对象_一个 Java 对象到底有多大?
阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...
- java背单词软件_一个JAVA写的背单词程序
一个JAVA写的背单词程序 2007-6-9文字大小:大中小 俺看了一些Java, 写个程序出来玩玩.由于界面是用Jbuilder生成的,可能代码比较乱,而且还没合起来. 目前版本是0.00001 / ...
最新文章
- 安装eclipse的maven插件
- [转]C++模板学习
- springmvcdate类型接收不到_无线电小课堂:如何在市区环境有效接收短波信号,选什么天线?...
- “vector”: 不是“std”的成员_libcxx 的 std::function 源码分析
- 2019全球开发者调查:仅2%的人996,Python并不是最受喜爱的语言
- 在python中函数和类都属于可调用对象_在Python中函数和类都属于可调用对象
- 量子化学计算机理,几种化学反应机理的量子化学理论计算
- Draw Circle 沿着圆运动~
- 基于深度学习的图像风格转换
- 用Html 和 Css来实现一个小小案例
- yarn在vscode里启动报错
- Hbuilder 跳转另一个app
- javascript在网页中实现粘贴qq截图功能
- 全球搜索引擎集合(主要有移动搜索APP的)
- openssl ca文档翻译
- java 切面 不执行,Spring AOP 切面没有执行
- word 插入图片方式
- uni-app 本地图片引入问题
- flash能否制作html游戏,10件Flash可以做而HTML5做不了的事情
- 全氟己基碘烷行业研究及十四五规划分析报告
热门文章
- python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?
- 工业大数据的应用与实践
- 作者:黄宜华,南京大学计算机系教授、博士生导师,中国计算机学会大数据专家委员会委员、副秘书长。...
- 【操作系统】信号量的用法
- 【MySQL】基于MySQL的SQL核心语法实战演练(三)
- 小学数学N合一(洛谷P2433题题解,Java语言描述)
- 【Java】链表求解一元多项式加法
- VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
- 最新java初级高级,python基础进阶,机器学习视频资料
- IS-IS(笔记整理)