jdk1.5不支持http协议,jdk1.8默认支持,比较好的解决方案是升级jdk,但是升级jdk风险极大。不能升级jdk的情况下,可以使用如下方式。

利用httpclient,进行封装,从而实现对https的get和post请求

import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* jdk1.5中没有封装好的包来请求https,所以这里做了一层封装,可以实现以下类型的请求
* http post
* http get
* https post
* https get
*
* @author qianhongwei
*/
public class HttpUtils {
private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class); /**
* 定义类型,用于获取不同类型的httpclient
*/
enum CLIENT_TYPE {
HTTP, HTTPS
} /**
* https post请求
*
* @param url 请求地址
* @param headerMap 请求头信息
* @param contentMap 请求体信息
* @return 结果返回
*/
public static String httpsPost(String url, Map<String, String> headerMap, Map<String, String> contentMap) {
return httpsPost(url, headerMap, contentMap, "UTF-8");
} /**
* http post请求
*
* @param url 请求地址
* @param headerMap 请求头信息
* @param contentMap 请求体信息
* @return 结果返回
*/
public static String httpPost(String url, Map<String, String> headerMap, Map<String, String> contentMap) {
return httpPost(url, headerMap, contentMap, "UTF-8");
} /**
* https get请求
*
* @param url 请求地址
* @param paramMap 请求参数
* @return 结果返回
*/
public static String httpsGet(String url, Map<String, String> paramMap) {
return httpsGet(url, paramMap, "UTF-8");
} /**
* http get请求
*
* @param url 请求地址
* @param paramMap 请求参数
* @return 结果返回
*/
public static String httpGet(String url, Map<String, String> paramMap) {
return httpGet(url, paramMap, "UTF-8");
} /**
* @param url 请求地址
* @param headerMap 请求头信息
* @param contentMap 请求体信息
* @param charset 编码类型
* @return 结果返回
*/
public static String httpsPost(String url, Map<String, String> headerMap, Map<String, String> contentMap, String charset) {
return post(url, headerMap, contentMap, charset, CLIENT_TYPE.HTTPS);
} /**
* @param url 请求地址
* @param headerMap 请求头信息
* @param contentMap 请求体信息
* @param charset 编码类型
* @return 结果返回
*/
public static String httpPost(String url, Map<String, String> headerMap, Map<String, String> contentMap, String charset) {
return post(url, headerMap, contentMap, charset, CLIENT_TYPE.HTTP);
} /**
* @param url 请求地址
* @param paramMap 请求参数
* @param charset 编码类型
* @return 结果返回
*/
public static String httpsGet(String url, Map<String, String> paramMap, String charset) {
return get(url, paramMap, charset, CLIENT_TYPE.HTTPS);
} /**
* @param url 请求地址
* @param paramMap 请求参数
* @param charset 编码类型
* @return 结果返回
*/
public static String httpGet(String url, Map<String, String> paramMap, String charset) {
return get(url, paramMap, charset, CLIENT_TYPE.HTTP);
} /**
* post 请求的实际方法
*
* @param url 请求地址
* @param headerMap 请求头信息
* @param contentMap 请求体信息
* @param charset 编码类型
* @param type 协议类型
* @return 结果返回
*/
private static String post(String url, Map<String, String> headerMap, Map<String, String> contentMap, String charset, CLIENT_TYPE type) {
if (StringUtils.isBlank(url)) {
throw new RuntimeException("请求url为空");
} String result = null;
HttpClient httpClient = null;
try {
HttpPost post = new HttpPost(url);
if (MapUtils.isNotEmpty(headerMap)) {// 设置请求头
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
post.addHeader(entry.getKey(), entry.getValue());
}
} if (MapUtils.isNotEmpty(contentMap)) {// 设置请求体
List<NameValuePair> content = getNameValuePairList(contentMap);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(content, charset);
post.setEntity(entity);
} httpClient = getClient(type);//这里是重点,根据不同协议获取不同类型的client端
HttpResponse response = httpClient.execute(post);//发送请求并接收返回数据
if (response != null) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, charset);
}
}
return result;
} catch (Exception ex) {
throw new RuntimeException("请求:" + url + " 异常:" + ex.getMessage());
} finally {
try {
if (null != httpClient && null != httpClient.getConnectionManager()) {
httpClient.getConnectionManager().shutdown();
}
} catch (Exception e) {
logger.error("请求:" + url + " 流关闭异常或者httpclient关闭异常");
}
}
} /**
* get 请求的实际方法
*
* @param url 请求地址
* @param paramMap 请求参数
* @param charset 编码类型
* @param type 协议类型
* @return 结果返回
*/
private static String get(String url, Map<String, String> paramMap, String charset, CLIENT_TYPE type) {
if (StringUtils.isBlank(url)) {
throw new RuntimeException("请求url为空");
} String result = null;
HttpClient httpClient = null;
try {
if (MapUtils.isNotEmpty(paramMap)) {// 拼接参数
// 设置请求体
List<NameValuePair> content = getNameValuePairList(paramMap);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(content, charset);
String params = EntityUtils.toString(entity);
url = url + "?" + params;
} HttpGet get = new HttpGet(url);
httpClient = getClient(type);
HttpResponse response = httpClient.execute(get); //发送请求并接收返回数据
if (response != null) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, charset);
}
}
return result;
} catch (Exception ex) {
throw new RuntimeException("请求:" + url + " 异常:" + ex.getMessage());
} finally {
try {
if (null != httpClient && null != httpClient.getConnectionManager()) {
httpClient.getConnectionManager().shutdown();
}
} catch (Exception e) {
logger.error("请求:" + url + " 流关闭异常或者httpclient关闭异常");
}
}
} private static List<NameValuePair> getNameValuePairList(Map<String, String> paramMap) {
List<NameValuePair> content = null;
if (MapUtils.isNotEmpty(paramMap)) {
// 设置请求体
content = new ArrayList<NameValuePair>();
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
content.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
return content;
} /**
* 根据指定类型返回http、https类型的客户端
*
* @param type 类型
* @return 客户端
* @throws Exception 异常信息
*/
private static DefaultHttpClient getClient(CLIENT_TYPE type) throws Exception {
if (type == CLIENT_TYPE.HTTP) {//http类型
return new DefaultHttpClient();
} else if (type == CLIENT_TYPE.HTTPS) {//https类型
return new SSLClient();
} else {
throw new RuntimeException("未知协议类型,请重新指定");
}
} /**
* 自定义SSL client
*/
static class SSLClient extends DefaultHttpClient {
public SSLClient() throws Exception {
super();
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
} @Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
} @Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
//传输协议需要根据自己的判断 
//SSLContext ctx = SSLContext.getInstance("TLSv1.2");
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 443, ssf));
}
} public static void main(String[] args) {
//Map<String, String> param = new HashMap<String, String>();
//param.put("fr", "aladdin");
//String result = httpsGet("https://baike.baidu.com/item/%E5%89%81%E6%A4%92%E9%B1%BC%E5%A4%B4/1171373", param); //String result = httpsGet("https://baike.baidu.com/item/%E5%89%81%E6%A4%92%E9%B1%BC%E5%A4%B4/1171373?fr=aladdin", null);
//String result = httpGet("http://www.baidu.com",null); //System.out.println(result);
} }

java5增加对https的支持的更多相关文章

  1. 咏南中间件增加HTTPS.SYS支持

    咏南中间件增加HTTPS.SYS支持 老客户可免费升级. HTTPS.SYS可以开发强大而稳定的REST SERVER. 微软在Windows Vista (server 2008) 以后使用http ...

  2. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  3. 使用PaxScript为Delphi应用增加对脚本的支持

    通过使用PaxScript可以为Delphi应用增加对脚本的支持. PaxScript支持paxC,paxBasic,paxPascle,paxJavaScript(对ECMA-262做了扩展) 四种 ...

  4. php增加对mysqli的支持

    php增加对mysqli的支持   我在fedora下使用yum安装的php和mysql,但是发现php不支持myslqi,只能编译一个mysqli的扩展给php用了. 方法如下: 1.下载php 2 ...

  5. HTTP实现长连接(TTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持Connection: keep-alive)

    HTTP实现长连接 HTTP是无状态的 也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web ...

  6. Jersey框架三:Jersey对HTTPS的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  7. 如何在iOS上实现对HTTPS的支持(转)

    原文地址:http://blog.5ibc.net/p/101504.html 首先,需要明确你使用HTTP/HTTPS的用途,因为OSX和iOS平台提供了多种API,来支持不同的用途,官方文档< ...

  8. MyEclipse6.5增加对Tomcat7的支持

    MyEclipse6.5增加对Tomcat7的支持 最近在研究Servlet3.0,它是JavaEE6.0规范中的一部分 而Servlet3.0对服务器是有要求的,比如Tomcat7+(而Tomcat ...

  9. 开源即时通讯GGTalk 8.0发布,增加Linux客户端,支持在统信UOS、银河麒麟上运行!

    GGTalk在2021年推出7.0后,经过一年多时间的开发,终于推出8.0版本,实现了Linux客户端. 这几年,信创国产化的势头越来越猛,政府事企业单位都在逐步转向使用国产OS.国产CPU.国产数据 ...

随机推荐

  1. linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)

    本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...

  2. let 命令 与 var的区别

    ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> { let a = 10; var b = 1; } ...

  3. expect的安装与使用

    expect的安装与使用 是什么 expect 是用来进行自动化控制和测试的工具.主要是和交互式软件telnet ftp ssh 等进行自动化的交互. 如何安装 1.检测是否安装 ls /usr/bi ...

  4. BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS

    BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...

  5. MongoDB之shard_副本集和分片部署

    机器角色分配和拓扑环境如下: -------------------配置副本集s1-------------------------------1.创建目录在s1h1上创建如下目录[root@node ...

  6. web安全之跨站请求伪造

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造.因为这个不是用户真正想发出的请求,这就是所谓的请求伪造;因为这些请求也是可以从第三方网站提交的,所以前缀跨站二 ...

  7. Asset Catalog Help (一)---About Asset Catalogs

    About Asset Catalogs Use asset catalogs to simplify management of images that are used by your app a ...

  8. Start Developing Mac Apps -- Mac App Store Mac 应用商店

      Mac App Store The information you’ve read so far focused on how to create an app in Xcode. However ...

  9. MySQL命令行参数

    一,mysql命令行参数 Usage: mysql [OPTIONS] [database]   //命令方式 -?, --help          //显示帮助信息并退出 -I, --help   ...

  10. JAVA基础-面向对象05

    一.面向对象的引入 解决问题的时候,首先要会分析思路,这个思路就是我们生活中解决一个问题的方法步骤: 有了思路之后,再把思路使用java代码来解决: 但是 计算总分的需求变了 分析:原来在一个程序中, ...