讀取URL頁面中的內容,支援HTTP和HTTPS協議

來源:互聯網
上載者:User

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;

        }

    }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.