读取URL页面中的内容,支持HTTP和HTTPS协议

本文介绍了一个Java工具类,该工具类能够读取HTTP和HTTPS协议下的URL内容,并通过自定义的信任管理器和主机名验证器处理HTTPS连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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&currentPage=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;




}




}




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值