读取URL页面中的内容,支持HTTP和HTTPS协议
来源:互联网 发布:淘宝网二手书店 编辑:程序博客网 时间:2024/06/05 17:50
package com.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
/**
* @author zhang-long
* 读取URL页面中的内容,支持HTTP和HTTPS协议
*/
public class ReadURLUtil {
// X509TrustManager接口的实例管理使用哪一个 X509 证书来验证远端的安全套接字。决定是根据信任的证
//书授权、证书撤消列表、在线状态检查或其他方式做出的。
private LmX509TrustManager xtm = new LmX509TrustManager();
//HostnameVerifier类是用于主机名验证的基接口
private LmHostnameVerifier hnv = new LmHostnameVerifier();
/**
* 初始化context及connection
*/
private void initContext() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("SSL", "SunJSSE");
X509TrustManager[] xtmArray = new X509TrustManager[]{xtm};
sslContext.init(null, xtmArray, new java.security.SecureRandom());
System.out.println("初始化正常!");
} catch (GeneralSecurityException gse) {
System.out.println("初始化SSL异常!" + gse);
}
if (sslContext != null) {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
.getSocketFactory());
}
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
}
// 以charSet为指定的编码格式,读取给出的urlStr的地址中的XML文件字符串
public String getString(String urlStr, String charSet) {
// String urlStr =
// "http://localhost:8080/SAP/eventTypeBusiness.do?method=query¤tPage=1&pageSize=10";
String errorMsg = "";
// 没有设置字符集的时候,使用UTF-8的字符
if (charSet == null || "".equals(charSet)) {
charSet = "UTF-8";
}
try {
URL url = new URL(urlStr);
if ("https".equals(url.getProtocol())) {
// 初始化证书,信任HTTPS证书
initContext();
}
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(connection.getInputStream(), charSet));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
buffer.append(line + "\n");
}
bufferedReader.close();
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
return errorMsg;
}
}
public static void main(String[] args) {
String url = "https://login.taobao.com/member/login.jhtml";
//String url = "http://www.baidu.com";
System.out.println(url);
String charset = "gbk";
ReadURLUtil util = new ReadURLUtil();
String result = util.getString(url, charset);
System.out.println("result=" + result);
}
/**
* 证书信任管理器类
*/
private class LmX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 主机校验类
*/
private class LmHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
/**
* @author zhang-long
* 读取URL页面中的内容,支持HTTP和HTTPS协议
*/
public class ReadURLUtil {
// X509TrustManager接口的实例管理使用哪一个 X509 证书来验证远端的安全套接字。决定是根据信任的证
//书授权、证书撤消列表、在线状态检查或其他方式做出的。
private LmX509TrustManager xtm = new LmX509TrustManager();
//HostnameVerifier类是用于主机名验证的基接口
private LmHostnameVerifier hnv = new LmHostnameVerifier();
/**
* 初始化context及connection
*/
private void initContext() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("SSL", "SunJSSE");
X509TrustManager[] xtmArray = new X509TrustManager[]{xtm};
sslContext.init(null, xtmArray, new java.security.SecureRandom());
System.out.println("初始化正常!");
} catch (GeneralSecurityException gse) {
System.out.println("初始化SSL异常!" + gse);
}
if (sslContext != null) {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
.getSocketFactory());
}
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
}
// 以charSet为指定的编码格式,读取给出的urlStr的地址中的XML文件字符串
public String getString(String urlStr, String charSet) {
// String urlStr =
// "http://localhost:8080/SAP/eventTypeBusiness.do?method=query¤tPage=1&pageSize=10";
String errorMsg = "";
// 没有设置字符集的时候,使用UTF-8的字符
if (charSet == null || "".equals(charSet)) {
charSet = "UTF-8";
}
try {
URL url = new URL(urlStr);
if ("https".equals(url.getProtocol())) {
// 初始化证书,信任HTTPS证书
initContext();
}
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(connection.getInputStream(), charSet));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
buffer.append(line + "\n");
}
bufferedReader.close();
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
return errorMsg;
}
}
public static void main(String[] args) {
String url = "https://login.taobao.com/member/login.jhtml";
//String url = "http://www.baidu.com";
System.out.println(url);
String charset = "gbk";
ReadURLUtil util = new ReadURLUtil();
String result = util.getString(url, charset);
System.out.println("result=" + result);
}
/**
* 证书信任管理器类
*/
private class LmX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 主机校验类
*/
private class LmHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
}
- 读取URL页面中的内容,支持HTTP和HTTPS协议
- 配置tomcat同时支持http和https协议
- HTTP 和 HTTPS 协议
- HTTP 和 HTTPS 协议
- HTTP 和 HTTPS 协议
- HTTP和HTTPS协议
- http和https协议
- HTTP协议和HTTPS协议
- http协议和https协议
- HTTP和URL协议
- HTTP和HTTPS网络协议
- HTTP协议和HTTPS协议详解
- Http协议和HttpS协议的简介
- HTTP协议和HTTPS协议详解
- Http协议和Https协议的区别
- Http协议和Https协议的区别
- HTTP协议和HTTPS协议初探
- HTTP协议和HTTPS协议详解
- 多余逗号导致的extjs兼容性问题
- Ubuntu12.04屏幕亮度调节方法汇总---总有一种方法适合你
- Eclipse中,打开文件所在文件夹的插件,及设置
- 最大子段和-分治&&动态规划
- VB.NET 简单三层登录实例
- 读取URL页面中的内容,支持HTTP和HTTPS协议
- 一台linux下启动两个tomcat
- Android GUI 的更新过程
- C#文件操作相关语句 - 大全
- ExtJs2.0学习系列(1)--Ext.MessageBox
- Effective stl
- ExtJs2.0学习系列(2)--Ext.Panel
- ExtJs2.0学习系列(3)--Ext.Window
- ExtJs2.0学习系列(4)--Ext.FormPanel之第一式