`

java JDK1.7的HTTPConnection请求Connection reset问题解决

 
阅读更多

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 JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,主要用于编写、编译、测试和运行Java应用程序。这个版本的JDK在2012年发布,引入了许多新特性,提升了性能,并...

    java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本

    Java JDK 1.7源码包是用于在CentOS 7操作系统上进行OpenJDK 1.8编译的重要资源。这个源码包包含了Java Development Kit的1.7版本,通常被称为JDK 7,它是Oracle公司发布的Java编程语言和Java平台标准版的一个实现。...

    linux-java jdk1.7

    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版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk...

    javajdk1.7环境

    Java JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,对于任何想要编写、编译、调试和运行Java程序的开发者来说,都是必不可少的基础。JDK 1.7,也被称为Java SE...

    java-JDK1.7.zip java-JDK1.7.zip

    Java JDK 1.7,全称为Java Development Kit 1.7,是Oracle公司推出的用于开发Java应用程序的重要工具集。这个版本在Java发展历程中扮演着重要角色,提供了许多新特性和性能优化,旨在提升开发效率和程序性能。下面将...

    java jdk1.7

    ### Java JDK 1.7 知识点详解 #### 一、Java JDK 1.7 概述 Java Development Kit (JDK) 是一个由Oracle公司提供的Java开发工具包,包含了编译、运行和调试Java应用程序所需的所有工具。Java JDK 1.7,即Java ...

    JDK 1.7压缩包.zip

    JDK 1.7,也称为Java SE 7(Java Standard Edition 7),是Java语言的一个重要版本,它包含了编译器、调试器、文档、Java虚拟机(JVM)以及其他开发所需的各种库。这个压缩包"JDK 1.7.zip"包含了所有这些组件,便于...

    java-jdk1.7-jdk-7u80-windows-x64.zip

    Java JDK 1.7,全称为Java Development Kit Version 1.7,是Oracle公司推出的用于开发和运行Java应用程序的重要工具集。此版本的JDK专为64位的Windows操作系统设计,即Windows x64。Java JDK包含了Java编译器(javac...

    JDK1.7 Ubuntu16.04亲测可用

    - 安装完成后,我们可以使用`java -version`和`javac -version`命令来验证JDK 1.7是否已经正确安装和配置: ``` java -version javac -version ``` 如果一切顺利,这两个命令将显示JDK 1.7的版本信息。 4. **...

    Java jdk1.7学习笔记pdf

    ### Java JDK 1.7 学习笔记核心知识点解析 #### 一、Java JDK 1.7 概述 在《Java JDK 1.7 学习笔记》这本书中,作者详细介绍了Java Development Kit (JDK) 1.7 的新特性与改进之处。Java 作为一门广泛使用的编程...

    JavaJDK1.7chm中文版

    "JavaJDK1.7chm中文版"则是一个针对中国用户特别制作的版本,它包含了完整的JDK 1.7 API文档,并且是中文语言,方便国内开发者查阅和理解。 CHM文件,全称为Compiled HTML Help,是微软开发的一种帮助文件格式,它...

    jdk1.7安装包下载

    JDK1.7,也被称为Java SE 7(Java Standard Edition 7),是Oracle公司在2011年发布的一个重要版本,引入了许多新特性和改进。在此,我们将深入探讨JDK1.7的一些关键知识点。 1. **动态类型**:JDK1.7引入了` ...

    jdk1.7版本免安装

    JDK 1.7,也被称为Java SE 7(Java Standard Edition 7),是Oracle公司发布的一个重要版本,包含了对语言特性和API的诸多改进和增强。这个"免安装"版本意味着它不需要传统的安装过程,用户可以直接解压并配置环境...

    Java安装环境所需的JDK1.7

    JDK1.7,也称为Java SE 7(Java Standard Edition 7),是Java历史上的一个重要版本,包含了对Java编程语言和平台的诸多改进与新特性。 首先,JDK的核心组成部分包括: 1. **Java编译器(javac)**:这是将源代码...

    jdk1.7 64位 解压缩版

    JDK1.7,也被称为Java 7或Java SE 7(Java Standard Edition 7),是Oracle公司在2011年发布的Java平台版本。这个版本带来了许多重要的改进和新特性,包括: 1. **多语言支持**:Java 7引入了JSR 223,使得在Java中...

    java JDK1.7版本下载

    Java JDK1.7是Oracle公司发布的Java开发工具包的一个重要版本,它包含了Java编译器、JVM(Java虚拟机)以及其他用于开发和运行Java应用程序的工具。在本篇文章中,我们将深入探讨JDK1.7的主要特性、安装与配置过程,...

    jdk1.7正式版64位下载

    描述中提到的“jdk1.7正式版64位下载”再次强调了这个资源的性质,即JDK 1.7的64位版本,适合需要在64位平台上进行Java开发的用户。 在标签中,"jdk"代表Java Development Kit,这是Java编程的核心组件,用于创建和...

    jdk1.7 jdk1.7 jdk1.7

    在给定的标题“jdk1.7 jdk1.7 jdk1.7”中,反复提及的“1.7”指的是Java的第七个主要版本,也被称为Java 7。这个版本在2011年发布,为开发者带来了许多新特性和改进,旨在提高开发效率和程序性能。 **一、JDK 1.7的...

    JDK1.7免安装版

    - 虽然JDK 1.7已经停止了官方更新,但仍然需要注意安全问题。对于生产环境,建议使用受支持的版本以获取持续的安全补丁。 - 对于个人学习,JDK 1.7可以作为了解Java发展历程的一部分,但应同时学习最新版本的特性...

Global site tag (gtag.js) - Google Analytics