java JDK1.7的HTTPConnection请求Connection reset问题解决
这几天有个接口,发现有个奇怪的问题,之前好的突然间出现httpconnection的链接请求错误
错误代码如下:
Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:189) at java.net.SocketInputStream.read(SocketInputStream.java:121) at sun.security.ssl.InputRecord.readFully(InputRecord.java:312) at sun.security.ssl.InputRecord.read(InputRecord.java:350) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
刚开始一点头绪都没有,后来慢慢研究发现,原来是客户更新了https证书,该证书不在支持TLSV1.0了导致的。而我们服务端的JDK版本比较久,是JDK1.7的,1.7默认使用的TLS版本是1.0,所以才会有这个问题
,需要在我们HTTPConnection中增加对默认tls的设置,才可以正常访问接口
加入下面代码:
/** * 证书信任 */ private static void trustAllHttpsCertificates() { try { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("TLSv1.2");//默认jdk1.7是使用tlsv1.0协议,这里采用1.2 sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch(Exception e) { e.printStackTrace(); } } static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } }
看到tlsv1.2的地方,改一下。然后在你原来connection链接请求地方调用上面代码方法
public static String getHttpContent(String url, String charSet) { //该部分必须在获取connection前调用 HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; } }; trustAllHttpsCertificates(); //////////在您connection之前调用一下就可以了 HttpURLConnection connection = null; String content = ""; try { URL address_url = new URL(url); connection = (HttpURLConnection) address_url.openConnection(); connection.setRequestProperty("Content-type", "text/html"); connection.setRequestProperty("Accept-Charset", charSet); connection.setRequestProperty("contentType", charSet); connection.setDoInput(true); connection.setDoOutput(true); // connection.setRequestMethod("GET"); //设置访问超时时间及读取网页流的超市时间,毫秒值 System.setProperty("sun.net.client.defaultConnectTimeout","20000"); System.setProperty("sun.net.client.defaultReadTimeout", "20000");
希望对后来的人有帮助就好。特此留帖!
相关推荐
Java JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,主要用于编写、编译、测试和运行Java应用程序。这个版本的JDK在2012年发布,引入了许多新特性,提升了性能,并...
Java JDK 1.7源码包是用于在CentOS 7操作系统上进行OpenJDK 1.8编译的重要资源。这个源码包包含了Java Development Kit的1.7版本,通常被称为JDK 7,它是Oracle公司发布的Java编程语言和Java平台标准版的一个实现。...
linux java jdk1.7 tar.gz linux java jdk1.7 tar.gzlinux java jdk1.7 tar.gzlinux java jdk1.7 tar.gz
jdk1.7_linux Linux版零积分jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk...
Java JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,对于任何想要编写、编译、调试和运行Java程序的开发者来说,都是必不可少的基础。JDK 1.7,也被称为Java SE...
Java JDK 1.7,全称为Java Development Kit 1.7,是Oracle公司推出的用于开发Java应用程序的重要工具集。这个版本在Java发展历程中扮演着重要角色,提供了许多新特性和性能优化,旨在提升开发效率和程序性能。下面将...
### Java JDK 1.7 知识点详解 #### 一、Java JDK 1.7 概述 Java Development Kit (JDK) 是一个由Oracle公司提供的Java开发工具包,包含了编译、运行和调试Java应用程序所需的所有工具。Java JDK 1.7,即Java ...
JDK 1.7,也称为Java SE 7(Java Standard Edition 7),是Java语言的一个重要版本,它包含了编译器、调试器、文档、Java虚拟机(JVM)以及其他开发所需的各种库。这个压缩包"JDK 1.7.zip"包含了所有这些组件,便于...
Java JDK 1.7,全称为Java Development Kit Version 1.7,是Oracle公司推出的用于开发和运行Java应用程序的重要工具集。此版本的JDK专为64位的Windows操作系统设计,即Windows x64。Java JDK包含了Java编译器(javac...
- 安装完成后,我们可以使用`java -version`和`javac -version`命令来验证JDK 1.7是否已经正确安装和配置: ``` java -version javac -version ``` 如果一切顺利,这两个命令将显示JDK 1.7的版本信息。 4. **...
### Java JDK 1.7 学习笔记核心知识点解析 #### 一、Java JDK 1.7 概述 在《Java JDK 1.7 学习笔记》这本书中,作者详细介绍了Java Development Kit (JDK) 1.7 的新特性与改进之处。Java 作为一门广泛使用的编程...
"JavaJDK1.7chm中文版"则是一个针对中国用户特别制作的版本,它包含了完整的JDK 1.7 API文档,并且是中文语言,方便国内开发者查阅和理解。 CHM文件,全称为Compiled HTML Help,是微软开发的一种帮助文件格式,它...
JDK1.7,也被称为Java SE 7(Java Standard Edition 7),是Oracle公司在2011年发布的一个重要版本,引入了许多新特性和改进。在此,我们将深入探讨JDK1.7的一些关键知识点。 1. **动态类型**:JDK1.7引入了` ...
JDK 1.7,也被称为Java SE 7(Java Standard Edition 7),是Oracle公司发布的一个重要版本,包含了对语言特性和API的诸多改进和增强。这个"免安装"版本意味着它不需要传统的安装过程,用户可以直接解压并配置环境...
JDK1.7,也称为Java SE 7(Java Standard Edition 7),是Java历史上的一个重要版本,包含了对Java编程语言和平台的诸多改进与新特性。 首先,JDK的核心组成部分包括: 1. **Java编译器(javac)**:这是将源代码...
JDK1.7,也被称为Java 7或Java SE 7(Java Standard Edition 7),是Oracle公司在2011年发布的Java平台版本。这个版本带来了许多重要的改进和新特性,包括: 1. **多语言支持**:Java 7引入了JSR 223,使得在Java中...
Java JDK1.7是Oracle公司发布的Java开发工具包的一个重要版本,它包含了Java编译器、JVM(Java虚拟机)以及其他用于开发和运行Java应用程序的工具。在本篇文章中,我们将深入探讨JDK1.7的主要特性、安装与配置过程,...
描述中提到的“jdk1.7正式版64位下载”再次强调了这个资源的性质,即JDK 1.7的64位版本,适合需要在64位平台上进行Java开发的用户。 在标签中,"jdk"代表Java Development Kit,这是Java编程的核心组件,用于创建和...
在给定的标题“jdk1.7 jdk1.7 jdk1.7”中,反复提及的“1.7”指的是Java的第七个主要版本,也被称为Java 7。这个版本在2011年发布,为开发者带来了许多新特性和改进,旨在提高开发效率和程序性能。 **一、JDK 1.7的...
- 虽然JDK 1.7已经停止了官方更新,但仍然需要注意安全问题。对于生产环境,建议使用受支持的版本以获取持续的安全补丁。 - 对于个人学习,JDK 1.7可以作为了解Java发展历程的一部分,但应同时学习最新版本的特性...