请教httpclient https访问https,我的步骤错哪里了

&>&Android使用HttpClient和HttpsUrlConnection两种方式访问https网站
Android使用HttpClient和HttpsUrlConnection两种方式访问https网站
上传大小:6.34MB
使用httpclient和httpsurlconnection两种方法访问https网址,同时分为验证证书和不验证证书两种方法
综合评分:4(4位用户评分)
所需积分/C币:
下载个数:152
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有4条
正好目前需要做这方面预研,下载了看看正好目前需要做这方面预研,下载了看看正好目前需要做这方面预研,下载了看看
正好目前需要做这方面预研,下载了看看
资源可用,还是不错的,有借鉴意义。
看看啊 学习学习 我以前实现了httpclient的自制证书 urlConnection 还不知道怎么写,正好看你的了,谢谢,感觉网上好多写法都不一样,我也是醉了
审核通过送C币
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
android图表控件和RecyclerView相关demo
创建者:huchengzhiqiang
上传者其他资源上传者专辑
Android DES,AES,RSA实现
移动开发热门标签
VIP会员动态
下载频道积分规则调整V1710.18
CSDN下载频道积分调整公告V1710.17
开通VIP,海量IT资源任性下载
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
为了良好体验,不建议使用迅雷下载
Android使用HttpClient和HttpsUrlConnection两种方式访问https网站
会员到期时间:
剩余下载个数:
剩余C币:200
剩余积分:6726
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
Android使用HttpClient和HttpsUrlConnection两种方式访问https网站博客分类:
异常信息如下:
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
原因:服务器的证书不被信任。一般是这样造成的。
使用KEYTOOL工具创建证书,然后用TOMCAT启动后,在浏览器打开网站时,会出现证书不被信任的提示。当然,利用HTTPCLIENT向服务端HTTPS发送数据时,HTTPCLIENT也会检测服务端的证书是否被信任,不被信任就抛出上面的异常。
解决办法有两种,一种是使证书被客户端信任。另一种是使用HTTPCLIENT发送数据时不检测服务器证书是否可信。
第一种办法,使证书被信任。
找正规CA签发证书,或者自己签发证书(只能那一台客户机上可信)。找正规CA签发证书就不说了,自己签发证书呢,见我的其他文章。
我发现,自己签名的证书弄好之后,从客户端打开服务端地址时,不再提示上面的错误,但是还是不能发送数据。原因是什么呢?因为那台证书在客户端操作系统上可信,但是在JAVA的KEYSTORE里不可信,要把服务端的证书导入KEYSTORE库中
导入办法:
打开命令行窗口,并到&java-home&\lib\security\
目录下,运行下面的命令:
keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer
最后一个是服务端导出的证书,其他可以默认。
要注意的是,如果客户端电脑上装有许多个JAVA版本,要确定你导入的证书的JAVA版本是你TOMCAT使用的那个,一般TOMCAT使用的是环境变量指向的那个JAVA版本。
如果是在ECLIPSE中建立的TOMCAT服务器,新建时会要你选择默认JRE还是指向的JAVA,这里一定要选指向刚才导入的那个JAVA的路径,不然,你导入的证书库也没效果。
第二种办法,使用HTTPCLIENT时不检测服务器证书是否可信
扩展HttpClient
类实现自动接受证书
因为这种方法自动接收所有证书,因此存在一定的安全问题,所以在使用这种方法前请仔细考虑您的系统的安全需求。具体的步骤如下:
o提供一个自定义的socket factory
(test.MySecureProtocolSocketFactory
)。这个自定义的类必须实现接口mons.httpclient.protocol.SecureProtocolSocketFactory
,在实现接口的类中调用自定义的X509TrustManager(test.MyX509TrustManager)
,这两个类可以在随本文带的附件中得到
o创建一个mons.httpclient.protocol.Protocol
的实例,指定协议名称和默认的端口号
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);
o注册刚才创建的https
Protocol.registerProtocol("https ", myhttps);
o然后按照普通
方式打开https
的目标地址,代码如下:
MySecureProtocolSocketFactory.java
import java.io.IOE
import java.net.InetA
import java.net.InetSocketA
import java.net.S
import java.net.SocketA
import java.net.UnknownHostE
import java.security.KeyManagementE
import java.security.NoSuchAlgorithmE
import java.security.cert.CertificateE
import java.security.cert.X509C
import javax.net.SocketF
import javax.net.ssl.SSLC
import javax.net.ssl.TrustM
import javax.net.ssl.X509TrustM
import mons.httpclient.ConnectTimeoutE
import mons.httpclient.params.HttpConnectionP
import mons.httpclient.protocol.SecureProtocolSocketF
public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory {
private SSLContext sslcontext =
private SSLContext createSSLContext() {
SSLContext sslcontext=
sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
private SSLContext getSSLContext() {
if (this.sslcontext == null) {
this.sslcontext = createSSLContext();
return this.
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
public Socket createSocket(String host, int port) throws IOException,
UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
public Socket createSocket(String host, int port, InetAddress localAddress,
int localPort, HttpConnectionParams params) throws IOException,
UnknownHostException, ConnectTimeoutException {
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null");
int timeout = params.getConnectionTimeout();
SocketFactory socketfactory = getSSLContext().getSocketFactory();
if (timeout == 0) {
return socketfactory.createSocket(host, port, localAddress, localPort);
Socket socket = socketfactory.createSocket();
SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
SocketAddress remoteaddr = new InetSocketAddress(host, port);
socket.bind(localaddr);
socket.connect(remoteaddr, timeout);
//自定义私有类
private static class TrustAnyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
浏览 12823
liulanghan110
浏览: 683366 次
来自: 武汉
看了半天 前面说的是错的?。。。
quainter 写道麻烦博主,参数为数组时,paramete ...
麻烦博主,参数为数组时,parameterType怎么写啊?
写得非常好,第一段看懂都觉得很有帮助,脑子像被敲了一下,清醒 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
private HttpClient initHttpClient() {
if(httpclient == null){
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
public void checkServerTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(sslcontext);
ClientConnectionManager ccm = new DefaultHttpClient().getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 8443, ssf));
HttpParams params = new BasicHttpParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000);
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
httpclient = new DefaultHttpClient(ccm,params);
} catch (Exception ex) {
ex.printStackTrace();
浏览: 157239 次
来自: 哈尔滨
提示An error was discovered proce ...
学习了。不太接触底层的东西
加油,。。。
莫非去淘宝菜鸟网络了?
我也是哈尔滨的,在广州做了三年的开发,可是实际上我们是在维护一 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
Android中自带Apache的HttpClient包,详见google的API[url]
/reference/org/apache/http/package-summary.html
[/url]所以在无需要任何引用的情况下就可以使用HttpClient相关的东西。但是,Android中的HttpClient与中的httpclient还是有所区别的,最主要的一个区别就是,Post方法时,Android的包支持自动重定向,而Apache官方的包不支持。
当访问https时,认证方案在客户端可以决定是否验证服务器,而服务器端可以选择是否验证客户端,如果双方都选择验证那么,就是双向验证;如果有一方选择不验证,那就是单向验证。作为客户端的Android单向验证和双向验证如下。
1 单向验证,即不验证服务器,在连接过程中首先读取本地客户端证书,然后采用不验证服务端信任证书的方式建立SSLContext,建立主要过程如下:
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
KeyManagerFactory keyManager = KeyManagerFactory.getInstance(KEY_MANAGER);
KeyStore keyKeyStore = KeyStore.getInstance(KEY_KEYSTORE);
File fk=new File(mKPath);
FileInputStream kIs = new FileInputStream(fk);
keyKeyStore.load(kIs,KSPWD.toCharArray());
kIs.close();
keyManager.init(keyKeyStore,KSPWD.toCharArray());
GetSecPolicy client=new GetSecPolicy(HOST, SERVER_PORT, keyManager.getKeyManagers());
UserID=client.getUserID(targetPage, null, null, true);
toast.setText(UserID);
toast.show();
if("1".equals(UserID)){
System.out.println("用户名或密码错误!UserID:"+UserID);
toast.setText("用户名或密码错误!");
toast.show();
System.out.println("用户名和密码认证成功!UserID:"+ UserID);
//toast.setText("用户名和密码认证成功!");
//toast.show();
//取出IMEI值,进行终端检查
TelephonyManager tm = (TelephonyManager) SoftCertUserLogin.this.getSystemService(Context.TELEPHONY_SERVICE);
String deviceId = tm.getDeviceId();//取出IMEI
//进行终端检查
System.out.println(OpenVpnAnimationActivity.USER_TYPE);
boolean check = client.secCheck(UserID, OpenVpnAnimationActivity.USER_TYPE, deviceId);
System.out.println(OpenVpnAnimationActivity.USER_TYPE);
if(check){//验证通过
//获取用户的的用户信息策略
System.out.println("checked!");
String loginPolicy = client.getSecLoginPolicy(UserID);
if(loginPolicy == null){
toast.setText("获取用户信息策略失败!");
toast.show();
System.out.println("获取用户信息策略失败!");
}else{//成功获取seclogininfo
System.out.println(loginPolicy);
Intent intent = new Intent();
intent.putExtra("loginPolicy", loginPolicy);//传给下一个Activity
intent.setClass(SoftCertUserLogin.this, MainpageActivity.class);
Bundle mBundle = new Bundle();
mBundle.putString("Seclogin", loginPolicy);//压入数据
intent.putExtras(mBundle);
SoftCertUserLogin.this.startActivity(intent);
if(version
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
//此为自定义的动画效果,下面两个为系统的动画效果
//overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
//overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
SoftCertUserLogin.this.finish();
}else{//验证失败
toast.setText("并没有绑定此手机,请重新登录!");
toast.show();
System.out.println("并没有绑定此手机,请重新登录!");
}catch(Exception e){
toast.setText("错误:"+e.getMessage());
toast.show();
其中MySSLSocketFactory实现如下:
import java.io.IOE
import java.net.S
import java.net.UnknownHostE
import java.security.KeyManagementE
import java.security.KeyS
import java.security.KeyStoreE
import java.security.NoSuchAlgorithmE
import java.security.UnrecoverableKeyE
import java.security.cert.CertificateE
import java.security.cert.X509C
import javax.net.ssl.KeyM
import javax.net.ssl.SSLC
import javax.net.ssl.TrustM
import javax.net.ssl.X509TrustM
import org.apache.http.conn.ssl.SSLSocketF
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
sslContext.init(null, new TrustManager[] { tm }, null);
public MySSLSocketFactory(KeyManager[] keys,KeyStore truststore ) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
sslContext.init(keys, new TrustManager[] { tm }, null);
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
2 双向认证,即读取服务器端的信任证书
建立httpclient的SSLContext如下:
SSLContext sslContext = SSLContext.getInstance(Constants.SSL.AGREEMENT);
KeyManagerFactory keyManager = KeyManagerFactory.getInstance(Constants.SSL.KEY_MANAGER);
TrustManagerFactory trustManager = TrustManagerFactory.getInstance(Constants.SSL.TRUST_MANAGER);
KeyStore keyKeyStore = KeyStore.getInstance(Constants.SSL.KEY_KEYSTORE);
KeyStore trustKeyStore = KeyStore.getInstance(Constants.SSL.TRUST_KEYSTORE);
FileInputStream kIs = new FileInputStream(mPath);
keyKeyStore.load(kIs,KSPWD.toCharArray());
kIs.close();
FileInputStream tkIS = new FileInputStream(mPath);
trustKeyStore.load(tkIS,TKSPWD.toCharArray());
tkIS.close();
keyManager.init(keyKeyStore,KSPWD.toCharArray());
trustManager.init(trustKeyStore);
sslContext.init(keyManager.getKeyManagers(), trustManager.getTrustManagers(), null);
在MySSLSocketFactory中添加相应构造函数即可。
[同时需要指明,android只支持bks格式的密库,而且android中自带 BouncyCastle的包,不同版本 BouncyCastle生成的密库是不兼容的,所以要注意密库版本]
浏览 15648
浏览: 93129 次
来自: 北京
Hi friendi got an issue when tr ...
我的是一个国产平板,就是识别不了,windows上也不行,用一 ...
Eyal 写道为什么返回的是指针。。还是没明白我觉得这是Jav ...
为什么返回的是指针。。还是没明白
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
package com.jadyer.&
import java.io.F&
import java.io.FileInputS&
import java.io.FileNotFoundE&
import java.io.IOE&
import java.security.KeyManagementE&
import java.security.KeyS&
import java.security.KeyStoreE&
import java.security.NoSuchAlgorithmE&
import java.security.UnrecoverableKeyE&
import java.security.cert.CertificateE&
import org.apache.http.HttpE&
import org.apache.http.HttpR&
import org.apache.http.ParseE&
import org.apache.http.client.ClientProtocolE&
import org.apache.http.client.HttpC&
import org.apache.http.client.methods.HttpG&
import org.apache.http.conn.scheme.S&
import org.apache.http.conn.ssl.SSLSocketF&
import org.apache.http.impl.client.DefaultHttpC&
import org.apache.http.util.EntityU&
* 使用HttpClient模拟HTTPS访问
* @see ===================================================================================================================================
* @see 【配置Tomcat支持SSL(即让Tomcat下的Web应用处于SSL安全通道中)】
* @see ===================================================================================================================================
* @see 1、生成KeyStore
* @see&&& 1)运行--&CMD--&"keytool -genkey -alias Jadyer_SSL_ -keyalg RSA -validity 1024 -keystore D:\Jadyer_SSL_.keystore"
* @see&&&&& 参数说明-----&-genkey& 表示生成密钥
* @see&&&&&&&&&&&&&&&&&& -alias&&& 指定别名,这里是Jadyer_SSL_
* @see&&&&&&&&&&&&&&&&&& -keyalg&& 指定算法,这里是RSA
* @see&&&&&&&&&&&&&&&&&& -validity 指定证书有效期,这里是1024天
* @see&&&&&&&&&&&&&&&&&& -keystore 指定存储位置,这里是D:\\Jadyer_SSL_.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_&的主密码(如果和 keystore 密码相同,按回车):这里按回车键
* @see&&&&&&&&&&&&&&&&&& (这里的主密码一定要与keystore密码相同,否则启动Tomcat时就会告诉你java.io.IOException: Cannot recover key)
* @see&&& 3)接下来就会按照-keystore参数值在指定位置生成指定的KeyStore文件了
* @see ===================================================================================================================================
* @see 2、让Tomcat支持SSL
* @see&&& 1)将生成的Jadyer_SSL_.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_.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, :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 = //响应内容&&
&&&&&&& HttpClient httpClient = new DefaultHttpClient(); //创建默认的httpClient实例&&
&&&&&&& try {&
&&&&&&&&&&& KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());&
&&&&&&&&&&& FileInputStream fis = new FileInputStream(new File("F:\\Tool\\IDE\\Jadyer_SSL_.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 responseC&
&&&&&&& }&
浏览: 48904 次
来自: 河北
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 okhttpclient https 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信