成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

httpClient ignore SSL post https

xfee / 1805人閱讀

摘要:如果服務(wù)器證書(shū)這兩者不合法而我們又必須讓其校驗(yàn)通過(guò),則可以自己實(shí)現(xiàn)。這個(gè)屬性是新加的屬性,因?yàn)槟壳鞍姹臼强梢怨蚕磉B接池的。請(qǐng)求獲取數(shù)據(jù)的超時(shí)時(shí)間,單位毫秒。如果訪問(wèn)一個(gè)接口,多少時(shí)間內(nèi)無(wú)法返回?cái)?shù)據(jù),就直接放棄此次調(diào)用。

/**


    com.alibaba
    fastjson
    1.2.47



    org.apache.httpcomponents
    httpclient
    4.5.9



    commons-lang
    commons-lang
    2.6


    org.projectlombok
    lombok
    1.16.18






*/

import com.alibaba.fastjson.JSON;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.*;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;

public class httpClientUtil {

//采用繞過(guò)驗(yàn)證的方式處理https請(qǐng)求
   // SSLContext sslcontext = createIgnoreVerifySSL();
public static CloseableHttpClient getIgnoeSSLClient() throws Exception {
    SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {

        public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            return true;
        }
    }).build();



    //CloseableHttpClient client = HttpClients.createDefault();*/

    //設(shè)置協(xié)議http和https對(duì)應(yīng)的處理socket鏈接工廠的對(duì)象

    Registry socketFactoryRegistry = RegistryBuilder.create()
            .register("http", PlainConnectionSocketFactory.INSTANCE)
            .register("https", new SSLConnectionSocketFactory(sslContext))
            .build();

    //HttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(rrrr);

    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);



    //創(chuàng)建httpClient
    CloseableHttpClient client = HttpClients.custom()
                                            .setSSLContext(sslContext).setConnectionManager(connManager).
                                            setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
    return client;
}


public final static void main(String[] args) throws Exception {

    CloseableHttpClient httpClient =getIgnoeSSLClient();
    CloseableHttpClient httpClient1 = null;

   // try {

  /*      // 加載自定義的keystore
       // SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new File("D:/java/IdeaProjects/test/src/main/resources/certs/my.keystore"), "123456".toCharArray()).build();

        SSLContext sslContext = createIgnoreVerifySSL();
        // 默認(rèn)的域名校驗(yàn)類(lèi)為DefaultHostnameVerifier,比對(duì)服務(wù)器證書(shū)的AlternativeName和CN兩個(gè)屬性。
        // 如果服務(wù)器證書(shū)這兩者不合法而我們又必須讓其校驗(yàn)通過(guò),則可以自己實(shí)現(xiàn)HostnameVerifier。
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() {
            public boolean verify(String s, SSLSession sslSession) {
                // 我們可以重寫(xiě)域名校驗(yàn)邏輯
                return true;
            }
        });

        // 一個(gè)httpClient對(duì)象對(duì)于https僅會(huì)選用一個(gè)SSLConnectionSocketFactory
        // 至少在4.5.3和4.5.4中,如果給HttpClient對(duì)象設(shè)置ConnectionManager,我們必須在PoolingHttpClientConnectionManager的構(gòu)造方法中傳入Registry,
        // 并將https對(duì)應(yīng)的工廠設(shè)置為我們自己的SSLConnectionSocketFactory對(duì)象,因?yàn)樵贒efaultHttpClientConnectionOperator.connect()中,邏輯是從這里找SSLConnectionSocketFactory的。
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(RegistryBuilder.create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", sslConnectionSocketFactory)
                .build());
        connectionManager.setMaxTotal(20);
        connectionManager.setDefaultMaxPerRoute(20);

        httpClient1 = HttpClients.custom()
                // 不在connectionManager中注冊(cè),僅在這里設(shè)置SSLConnectionSocketFactory是無(wú)效的,詳見(jiàn)build()內(nèi)部邏輯,在connectionManager不為null時(shí),不會(huì)使用里的SSLConnectionSocketFactory
                .setSSLSocketFactory(sslConnectionSocketFactory)
                .setConnectionManager(connectionManager)
                .build();*/

 /*       httpClient = getIgnoeSSLClient();


        HttpGet httpGet = new HttpGet("https://www.12306.cn");
        System.out.println("Executing request " + httpGet.getRequestLine());
        CloseableHttpResponse response = httpClient.execute(httpGet);
        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != httpClient) {
                httpClient.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/



    String body = "";

  /*  //采用繞過(guò)驗(yàn)證的方式處理https請(qǐng)求
    SSLContext sslcontext = createIgnoreVerifySSL();
    //設(shè)置協(xié)議http和https對(duì)應(yīng)的處理socket鏈接工廠的對(duì)象
    Registry socketFactoryRegistry = RegistryBuilder.create()
            .register("http", PlainConnectionSocketFactory.INSTANCE)
            .register("https", new SSLConnectionSocketFactory(sslcontext))
            .build();
    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
    HttpClients.custom().setConnectionManager(connManager);

    //創(chuàng)建自定義的httpclient對(duì)象
    CloseableHttpClient client = HttpClients.custom().setConnectionManager(connManager).build();
    //CloseableHttpClient client = HttpClients.createDefault();*/

    try{
        //創(chuàng)建post方式請(qǐng)求對(duì)象
        HttpPost httpPost = new HttpPost("https://www.douban.com/service/apikey/apply");//https://api.douban.com/v2/book/1220562


        //指定報(bào)文頭Content-type、User-Agent
        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");

        httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");

        //setConnectTimeout:設(shè)置連接超時(shí)時(shí)間,單位毫秒。
        //setConnectionRequestTimeout:設(shè)置從connect Manager獲取Connection 超時(shí)時(shí)間,單位毫秒。這個(gè)屬性是新加的屬性,因?yàn)槟壳鞍姹臼强梢怨蚕磉B接池的。
        //setSocketTimeout:請(qǐng)求獲取數(shù)據(jù)的超時(shí)時(shí)間,單位毫秒。 如果訪問(wèn)一個(gè)接口,多少時(shí)間內(nèi)無(wú)法返回?cái)?shù)據(jù),就直接放棄此次調(diào)用。


        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(5000).build();


        httpPost.setConfig( requestConfig);

        //apikey: "0b2bdeda43b5688921839c8ecb20399b"

        Map params = new HashMap();
        params.put("apikey","0b2bdeda43b5688921839c8ecb20399b");

        StringEntity stringEntity = new StringEntity(JSON.toJSONString(params),"utf-8");
        httpPost.setEntity(stringEntity);


        //執(zhí)行請(qǐng)求操作,并拿到結(jié)果(同步阻塞)
        CloseableHttpResponse response = httpClient.execute(httpPost);

        //獲取結(jié)果實(shí)體
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            //按指定編碼轉(zhuǎn)換結(jié)果實(shí)體為String類(lèi)型
            body = EntityUtils.toString(entity, "UTF-8");
        }

        EntityUtils.consume(entity);
        //釋放鏈接
        response.close();
        System.out.println("body:" + body);
    }finally{
        httpClient.close();
    }




}




public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
    SSLContext sc = SSLContext.getInstance("SSLv3");

    // 實(shí)現(xiàn)一個(gè)X509TrustManager接口,用于繞過(guò)驗(yàn)證,不用修改里面的方法
    X509TrustManager trustManager = new X509TrustManager() {
        public void checkClientTrusted(
                java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                String paramString) throws CertificateException {
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                String paramString) throws CertificateException {
        }

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };
    sc.init(null, new TrustManager[] { trustManager }, null);
    return sc;
}


}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75739.html

相關(guān)文章

  • httpclient訪問(wèn)https

    摘要:序本文從里頭摘出訪問(wèn)的源碼,展示一下怎么用去訪問(wèn)。其中指定要不要檢驗(yàn),如果不校驗(yàn),則是使用小結(jié)使用不去驗(yàn)證,但是可能存在風(fēng)險(xiǎn)構(gòu)造 序 本文從spring cloud netflix zuul里頭摘出httpclient訪問(wèn)https/http的源碼,展示一下怎么用httpclient去訪問(wèn)https。 newConnectionManager protected PoolingHttp...

    waruqi 評(píng)論0 收藏0
  • 記一次線程掛死的排查過(guò)程(附 HttpClient 配置建議)

    摘要:此時(shí)我想到了福爾摩斯說(shuō)過(guò)的一句話當(dāng)你排除掉各種不可能出現(xiàn)的情況之后,剩下的情況無(wú)論多么難以置信,都是真相。福爾摩斯冷靜下來(lái)想一想,這個(gè)線程,有可能靜悄悄地退出了嗎,沒(méi)留下半點(diǎn)異常日志從理論上來(lái)說(shuō),不可能。配置建議最后,附上一份配置建議。 1、事發(fā) 我們有個(gè)視頻處理程序,基于 SpringBoot,會(huì)啟動(dòng)幾個(gè)線程來(lái)跑。要退出程序時(shí),會(huì)發(fā)送一個(gè)信號(hào)給程序,每個(gè)線程收到信號(hào)后會(huì)平滑退出,等全...

    jollywing 評(píng)論0 收藏0
  • HttpCilent 發(fā)送 POST Http以及Https請(qǐng)求,簡(jiǎn)單封裝

    摘要:?jiǎn)栴}最近項(xiàng)目上面遇到和對(duì)接,測(cè)試庫(kù)他們使用的是,但是正式庫(kù)使用的是。之前沒(méi)有做過(guò),在網(wǎng)上找過(guò)好多文章,最后還是借鑒別人的,自己重新封裝之后才在項(xiàng)目上面使用。以上是我在項(xiàng)目上面使用的,沒(méi)有添加全部的代碼,但是對(duì)應(yīng)的方法都是可以使用的。 問(wèn)題: 最近項(xiàng)目上面遇到和App對(duì)接,測(cè)試庫(kù)他們使用的是 HTTP,但是正式庫(kù)使用的是 HTTPS。之前沒(méi)有做過(guò),在網(wǎng)上找過(guò)好多文章,最后還是借鑒別人的,...

    Rainie 評(píng)論0 收藏0
  • PHP回顧之IO

    摘要:命令行時(shí)返回值為,標(biāo)準(zhǔn)輸入輸出均指向終端可用進(jìn)程號(hào)查看。會(huì)在腳本執(zhí)行完畢后關(guān)閉三個(gè)流,無(wú)需用戶(hù)手動(dòng)關(guān)閉。與遠(yuǎn)程網(wǎng)址交互是一個(gè)請(qǐng)求和響應(yīng)的過(guò)程,其中細(xì)節(jié)可參考本人之前的文章回顧之請(qǐng)求和回顧之響應(yīng),也可參考協(xié)議的權(quán)威文檔。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) ses...

    happen 評(píng)論0 收藏0
  • java9系列(六)HTTP/2 Client (Incubator)

    摘要:鑒于它還處在,如果不是著急使用,建議還是使用的,它是遵循規(guī)范的,使用起來(lái)更加方便。貌似要在版本才支持。揭秘讓支持協(xié)議如何啟用命令支持 序 本文主要研究下JEP 110: HTTP/2 Client (Incubator) 基本實(shí)例 sync get /** * --add-modules jdk.incubator.httpclient * @throws ...

    tomlingtm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

xfee

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<