第一个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 接口自动化程序相关推荐

  1. 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...

    我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么? welcome.java: import javax.swing.*; public class w ...

  2. 便携式液晶驱动板卡方案可支持1080P能驱动 HBR 4LANE EDP 接口的液晶面板有一个 miniHDMI 接口,两个 Type-C 信号接口。支持 HDR 高动态。

    AP2KS REV1.1 是一款多功能便携式液晶显示器驱动板卡,可支持最高分辨率 2560*1600@60Hz, 能驱动 HBR 4LANE EDP 接口的液晶面板. 拥有一个 miniHDMI 接口 ...

  3. 一个java类可以有_一个.java文件中可以有几个同级类?

    1.在一个.java文件中可以有多个同级类(和public一样的位置,注意不是内部类).其修饰符只可以public/abstract/final/和无修饰符,不能是其他的protected/priva ...

  4. 【Java】我的第一个 JAVA 程序:Hello,world!

    Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...

  5. java命令行参数_一个 java 命令行参数顺序的坑

    tream Stream是在Java SE 8 API添加的用于增强集合的操作接口,可以让你以一种声明的方式处理集合数据.将要处理的集合看作一种流的创建者,将集合内部的元素转换为流并且在管道中传输, ...

  6. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

  7. 小汤学编程之JAVA基础day01——JAVA基本概念、第一个JAVA程序

    一.JAVA的概念 1.名字的由来      2.java之父     3.java的分类     4.虚拟机跨平台原理 二.第一个JAVA程序 1.编译环境      2.环境变量     3.用黑 ...

  8. java有几大对象_一个 Java 对象到底有多大?

    阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...

  9. java背单词软件_一个JAVA写的背单词程序

    一个JAVA写的背单词程序 2007-6-9文字大小:大中小 俺看了一些Java, 写个程序出来玩玩.由于界面是用Jbuilder生成的,可能代码比较乱,而且还没合起来. 目前版本是0.00001 / ...

最新文章

  1. 安装eclipse的maven插件
  2. [转]C++模板学习
  3. springmvcdate类型接收不到_无线电小课堂:如何在市区环境有效接收短波信号,选什么天线?...
  4. “vector”: 不是“std”的成员_libcxx 的 std::function 源码分析
  5. 2019全球开发者调查:仅2%的人996,Python并不是最受喜爱的语言
  6. 在python中函数和类都属于可调用对象_在Python中函数和类都属于可调用对象
  7. 量子化学计算机理,几种化学反应机理的量子化学理论计算
  8. Draw Circle 沿着圆运动~
  9. 基于深度学习的图像风格转换
  10. 用Html 和 Css来实现一个小小案例
  11. yarn在vscode里启动报错
  12. Hbuilder 跳转另一个app
  13. javascript在网页中实现粘贴qq截图功能
  14. 全球搜索引擎集合(主要有移动搜索APP的)
  15. openssl ca文档翻译
  16. java 切面 不执行,Spring AOP 切面没有执行
  17. word 插入图片方式
  18. uni-app 本地图片引入问题
  19. flash能否制作html游戏,10件Flash可以做而HTML5做不了的事情
  20. 全氟己基碘烷行业研究及十四五规划分析报告

热门文章

  1. python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?
  2. 工业大数据的应用与实践
  3. 作者:黄宜华,南京大学计算机系教授、博士生导师,中国计算机学会大数据专家委员会委员、副秘书长。...
  4. 【操作系统】信号量的用法
  5. 【MySQL】基于MySQL的SQL核心语法实战演练(三)
  6. 小学数学N合一(洛谷P2433题题解,Java语言描述)
  7. 【Java】链表求解一元多项式加法
  8. VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
  9. 最新java初级高级,python基础进阶,机器学习视频资料
  10. IS-IS(笔记整理)