上篇中提到了在NTLM协议中使用HTTPS协议访问需要双向认证的问题,这里会给出方案和相应代码。
public static String getWithNTCredentialAndSSLClientAuth(String url,boolean needProxy,int msTimeOut) throws MalformedURLException{ log.info("--get url:[" + url + "]"); String responseBody = null; HttpMethod getMethod = new GetMethod(url); if(msTimeOut>0) { getMethod.getParams().setSoTimeout(msTimeOut); } log.info("--queryString:" + getMethod.getQueryString()); Protocol authhttps = new Protocol("https",new AuthSSLProtocolSocketFactory(), 443); Protocol.registerProtocol("https",authhttps); HttpClient httpClient = new HttpClient(); if (needProxy) { String proxyUrl = "xxx.xxx.xxx.xxx"; String proxyPort ="8080"; String proxyUser ="xxxxxx"; String proxyPassword ="xxxxx"; String domain="xxxxx.COM"; httpClient.getHostConfiguration().setProxy(proxyUrl,Integer.parseInt(proxyPort)); List authPrefs = new ArrayList(2); authPrefs.add(AuthPolicy.NTLM); httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"); httpClient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); // 如果代理需要密码验证,这里设置用户名密码 NTCredentials ntc=new NTCredentials(proxyUser, proxyPassword,proxyUrl,domain); httpClient.getState().setProxyCredentials(AuthScope.ANY,ntc); } try { int statusCode = httpClient.executeMethod(getMethod); log.info("http get url:" + getMethod.getURI()); log.info("----http status code:" + statusCode); if (statusCode == HttpStatus.SC_OK || statusCode==HttpStatus.SC_PARTIAL_CONTENT) { responseBody = getMethod.getResponseBodyAsString(); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { getMethod.releaseConnection(); } return responseBody; }
关键代码
Protocol authhttps = new Protocol("https",new AuthSSLProtocolSocketFactory(), 443); Protocol.registerProtocol("https",authhttps);
此处代码指定使用https协议,而此协议的创建需要传入
AuthSSLProtocolSocketFactory
这是SSL协议认证工厂实例,这个实例主要提供 SSLContext 即SSL上下文,示例代码中,该上下文由SSLTool类提供,而 SSLContext的创建需要服务器端证书,客户端证书,客户端证书。示例代码中,我们把配置我们存放在/configs/tenpay.properties文件中。
server_cert_file_name=D:/sslfile/xxxx.pem 服务器端证书文件路径 client_cert_file_name=D:/sslfile/xxxx.pfx 客户端证书文件路径 client_cert_password=xxxxx客户端证书密码
代码中,测试方法在src\com\apache\test\https\HttpClientUtil.java 中
有问题可加QQ 359709421
如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!
相关推荐
这是一个关于httpclient4.5访问https网站的例子,可以绕过ssl认证直接访问
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
使用httpclient和httpsurlconnection两种方法访问https网址,同时分为验证证书和不验证证书两种方法
https请求封装类 双向认证 httpclient
另外在项目中正好需要访问https协议的接口,而对应的服务器没有购买商业CA颁发的正式受信证书,只是做了个自签名(联想一下12306网站购票时提示的那个警告信息),默认情况下通过HttpClient访问会抛出异常。...
JAVA利用HttpClient进行HTTPS接口调用
httpclient 实现https双向认证
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分...
以上自己测试是可行的,直接拿过去导入即可,直接用main
(完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc
本实例描述了Android平台下使用Apache开源项目的HttpClient访问网络的示例。分别使用HttpClient下的两个子实现类,DefaultHttpClient和AndroidHttpClient分别进行演示。
httpclient来进行https访问
HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。
httpClient 教程 使用事例 单向认证
httpclient使用教程
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
用VC实现http协议,构造httpserver和httpclient两端应用实例。
HTTPClient协议
Http协议使用封装jar包(commons-codec-1.3.jar、commons-httpclient-3.1.jar、commons-logging-1.1.jar) 简单使用方法: public static void main(String[] args) { // String str1 = "...