`
小斌张
  • 浏览: 89091 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

httpclient访问https

    博客分类:
  • java
阅读更多
package com.jadyer.util; 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.security.KeyManagementException; 
import java.security.KeyStore; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.security.UnrecoverableKeyException; 
import java.security.cert.CertificateException; 
 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.ParseException; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.conn.scheme.Scheme; 
import org.apache.http.conn.ssl.SSLSocketFactory; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

/**
* 使用HttpClient模拟HTTPS访问
* @see ===================================================================================================================================
* @see 【配置Tomcat支持SSL(即让Tomcat下的Web应用处于SSL安全通道中)】
* @see ===================================================================================================================================
* @see 1、生成KeyStore
* @see    1)运行-->CMD-->"keytool -genkey -alias Jadyer_SSL_20120508 -keyalg RSA -validity 1024 -keystore D:\Jadyer_SSL_20120508.keystore"
* @see      参数说明----->-genkey  表示生成密钥
* @see                   -alias    指定别名,这里是Jadyer_SSL_20120508
* @see                   -keyalg   指定算法,这里是RSA
* @see                   -validity 指定证书有效期,这里是1024天
* @see                   -keystore 指定存储位置,这里是D:\\Jadyer_SSL_20120508.keystore
* @see    2)CMD输出----->输入keystore密码:hongyu75
* @see                   再次输入新密码:hongyu75
* @see                   您的名字与姓氏是什么?[Unknown]:127.0.0.1(这里要根据实际情况填写网站域名或者IP,否则会出现证书上的名称无效)
* @see                   您的组织单位名称是什么?[Unknown]:http://blog.csdn.net/jadyer
* @see                   您的组织名称是什么?[Unknown]:JavaLover_jadyer
* @see                   您所在的城市或区域名称是什么?[Unknown]:BJ
* @see                   您所在的州或省份名称是什么?[Unknown]:BJ_NanTian
* @see                   该单位的两字母国家代码是什么[Unknown]:CN
* @see                   CN=127.0.0.1, OU=http://blog.csdn.net/jadyer, O=JavaLover_jadyer, L=BJ, ST=BJ_NanTian, C=CN 正确吗?[否]:Y
* @see                   输入<Jadyer_SSL_20120508>的主密码(如果和 keystore 密码相同,按回车):这里按回车键
* @see                   (这里的主密码一定要与keystore密码相同,否则启动Tomcat时就会告诉你java.io.IOException: Cannot recover key)
* @see    3)接下来就会按照-keystore参数值在指定位置生成指定的KeyStore文件了
* @see ===================================================================================================================================
* @see 2、让Tomcat支持SSL
* @see    1)将生成的Jadyer_SSL_20120508.keystore拷贝到\\%TOMCAT_HOME%\\conf\\目录中(其它目录也可以)
* @see    2)修改\\%TOMCAT_HOME%\\conf\\server.xml文件(大约在85行的位置),新增内容如下
* @see      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
* @see                 maxThreads="150" scheme="https" secure="true"
* @see                 clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"
* @see                 keystoreFile="conf/Jadyer_SSL_20120508.keystore" keystorePass="hongyu75"/>
* @see    3)这样,我们的Tomcat就支持HTTPS访问了(关于<Connector/>标签中的属性说明,参拜Google大神)
* @see ===================================================================================================================================
* @see 3、用浏览器访问我们的应用
* @see   1)输入https://127.0.0.1:8443/blog会发现你的应用已经处于SSL安全通道中了
* @see     此时,如果我们在浏览器里访问http://127.0.0.1:8443/blog会发现,竟然能访问
* @see     也就是说,我们虽然启用了HTTPS,但现在还可以绕开HTTPS直接访问HTTP还能,这样HTTPS也就起不到作用了
* @see   2)我们可以配置一下\\%TOMCAT_HOME%\\conf\\web.xml文件,使得HTTP的访问能够重定向到HTTPS的连接
* @see     修改位置大约为web.xml的1224行,即在</welcome-file-list>标签后面加入下面的内容,即可
* @see     <security-constraint>
* @see         <!-- Authorization setting for SSL -->
* @see         <web-resource-collection>
* @see             <web-resource-name>SSL_App</web-resource-name>
* @see             <!-- 指明需要SSL的url -->
* @see             <url-pattern>/*</url-pattern>
* @see             <http-method>GET</http-method>
* @see             <http-method>POST</http-method>
* @see         </web-resource-collection>
* @see         <user-data-constraint>
* @see             <!-- 指明需要SSL -->
* @see             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
* @see         </user-data-constraint>
* @see     </security-constraint>
* @see ===================================================================================================================================
* @author http://blog.csdn.net/jadyer
* @editor Feb 1, 2012 3:02:27 PM
*/ 
public class HttpClientUtil { 
    public static void main(String[] args)throws Exception{ 
        //String requestUrl = "http://127.0.0.1:8088/test/web/userac";  
        String requestUrl = "https://127.0.0.1:8443/test/web/userac"; 
        System.out.println(sendSSLRequest(requestUrl)); 
    } 
     
    /**
     * 发送HTTPS请求
     * @param requestUrl 请求的地址
     * @return 响应内容
     */ 
    @SuppressWarnings("finally") 
    public static String sendSSLRequest(String requestUrl){ 
        long responseLength = 0;       //响应长度  
        String responseContent = null; //响应内容  
        HttpClient httpClient = new DefaultHttpClient(); //创建默认的httpClient实例  
        try { 
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
            FileInputStream fis = new FileInputStream(new File("F:\\Tool\\IDE\\Jadyer_SSL_20120508.keystore")); 
            try { 
                trustStore.load(fis, "hongyu75".toCharArray()); //加载KeyStore  
            } catch (NoSuchAlgorithmException e) { 
                e.printStackTrace(); 
            } catch (CertificateException e) { 
                e.printStackTrace(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } finally { 
                try { 
                    fis.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
            } 
            SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);   //创建Socket工厂,将trustStore注入  
            Scheme sch = new Scheme("https", 8443, socketFactory);               //创建Scheme  
            httpClient.getConnectionManager().getSchemeRegistry().register(sch); //注册Scheme  
            HttpGet httpGet = new HttpGet(requestUrl);           //创建HttpGet  
            HttpResponse response = httpClient.execute(httpGet); //执行GET请求  
            HttpEntity entity = response.getEntity();            //获取响应实体  
            if (null != entity) { 
                responseLength = entity.getContentLength(); 
                responseContent = EntityUtils.toString(entity, "UTF-8"); 
                EntityUtils.consume(entity); //Consume response content  
            } 
            System.out.println("请求地址: " + httpGet.getURI()); 
            System.out.println("响应状态: " + response.getStatusLine()); 
            System.out.println("响应长度: " + responseLength); 
           System.out.println("响应内容: " + responseContent); 
        } catch (KeyManagementException e) { 
            e.printStackTrace(); 
        } catch (UnrecoverableKeyException e) { 
            e.printStackTrace(); 
        } catch (KeyStoreException e) { 
            e.printStackTrace(); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (NoSuchAlgorithmException e) { 
            e.printStackTrace(); 
        } catch (ClientProtocolException e) { 
            e.printStackTrace(); 
        } catch (ParseException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            httpClient.getConnectionManager().shutdown(); //关闭连接,释放资源  
            return responseContent; 
        } 
   } 

分享到:
评论

相关推荐

    使用httpClient访问https+443端口号。

    标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...

    android HttpClient访问Https

    android HttpClient访问某些Https时,出现了问题,无法访问,好像是要安全验证。此Demo解决了此问题,HttpClient能够Https和Http类型的URL了。 在eclipse下打开工程若有乱码,请把eclipse的字符编码改成UTF-8。

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    Android使用HttpClient和HttpsUrlConnection两种方式访问https网站

    #### 1.1 配置HttpClient访问HTTPS(不验证证书) ```java // 创建HttpClient实例 HttpClient httpClient = new DefaultHttpClient(); // 创建HttpGet请求 HttpGet httpGet = new HttpGet("https://example.com");...

    httpclient4.5发送https请求(验证证书)

    不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家

    httpclient来进行https访问

    根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...

    HttpClient之Https应用实例

    HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)

    httpClient4.1入门教程.pdf

    最后,文档还演示了如何使用HttpClient访问HTTPS协议的站点,包括生成KeyStore以及配置Tomcat服务器支持SSL的方法,并指导用户如何通过浏览器和HttpClient访问经过SSL加密的应用。 整体而言,本教程深入浅出地介绍...

    使用httpclient访问servlet

    总之,使用HttpClient访问Servlet能够简化Java应用之间的通信,特别是在分布式系统中。正确理解和应用HttpClient的各种特性和配置,能够帮助我们构建高效、可靠的网络通信方案。在实际开发中,还需要根据具体项目...

    httpclient4.1访问https的配置方法

    【标题】:“httpclient4.1访问https的配置方法” 【描述】:“本教程将指导你如何利用Apache HttpClient 4.1实现对HTTPS服务的访问,首先需要在Tomcat服务器上配置SSL支持。我们将涵盖SSL证书的生成、Tomcat服务器...

    httpClient4.1入门教程.

    4) 用 httpClient 访问 https:配置 HttpClient 使用 SSL,设置信任的 KeyStore 和相关安全参数,然后发送 HTTPS 请求。 教程版本说明 该教程的初始版本为 0.9,由作者 wanghe 编写。内容包括了基本的 HttpClient...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    为了访问这类接口,我们需要自定义SSL上下文(SSLContext)并配置HttpClient。 首先,我们来看`InstallCert.java`这个文件。这个文件通常用于安装或导入客户端证书到本地的信任存储。在Java中,我们可以使用Keytool...

    JAVA利用HttpClient进行HTTPS接口调用的方法

    "JAVA利用HttpClient进行HTTPS接口调用的方法" 知识点1:HttpClient的基本概念 HttpClient是一个开放源代码的Java库,用于提供高效、灵活和可扩展的HTTP客户端解决方案。HttpClient支持HTTP/1.1和HTTP/2.0协议,...

    httpClient4.1入门教程

    #### 4) 用HttpClient访问HTTPS HttpClient中,你需要创建一个使用SSLContext的`SchemeRegistry`,并配置`HttpParams`以启用SSL连接。 ### 7. 官方例子与HttpClient4.1教程 Apache HttpClient的官方文档提供了许多...

    简单的httpClient访问

    这篇名为“简单的httpClient访问”的博文可能是介绍如何使用HttpClient进行基础的HTTP请求。HttpClient库提供了丰富的功能,包括GET、POST请求,设置请求头,处理响应,以及支持HTTPS等。接下来,我们将深入探讨...

    httpclient4.5 绕过ssl认证文件访问

    本篇文章将详细讲解如何在HTTPClient 4.5版本中绕过SSL(Secure Sockets Layer)认证,实现对HTTPS网站的访问。 首先,了解SSL/TLS(Transport Layer Security)协议的重要性。SSL/TLS是网络安全传输的标准,它通过...

    使用httpclient无需证书调用https的示例(java调用https)

    Apache HttpClient库是一个强大的HTTP客户端实现,支持包括HTTPS在内的多种协议。当需要与不受信任的HTTPS服务器通信时,我们可能需要禁用证书验证以允许连接。以下是一个使用HttpClient进行无证书验证调用HTTPS的...

    HttpClient使用教程

    - 用 HttpClient 访问 HTTPS:配置 HttpClient 实例使用 SSLContext 和 TrustStrategy,允许信任所有证书,然后执行 HTTPS 请求。 教程版本说明: 该教程基于 HttpClient 4.1 版本,包括基础用法和 SSL 访问的...

    Titanium中Httpclient访问REST 服务

    本主题将深入探讨如何在Titanium框架中使用HttpClient访问REST服务,这对于构建跨平台的移动应用至关重要。 Titanium是一款JavaScript开发的开源移动应用框架,它允许开发者使用JavaScript编写原生iOS和Android应用...

Global site tag (gtag.js) - Google Analytics