NC調(diào)用第三方https接口

文檔只測(cè)試了https-post 江锨、https-get (非webservice)接口實(shí)現(xiàn)方式

webservice接口:

如果將證書導(dǎo)入jdk中不行鉴象,建議另起服務(wù)調(diào)用境输。暫時(shí)沒有辦法喇伯。

思路:

  1. 在NC掉用中間服務(wù) 中間服務(wù)調(diào)用第三方https-webservice接口

  2. 中間服務(wù)器使用jdk1.8及以上

  3. 調(diào)用服務(wù)前增加 放棄驗(yàn)證(用于axis)

AxisProperties.setProperty("axis.socketSecureFactory",

        "org.apache.axis.components.net.SunFakeTrustSocketFactory");

如果上面方法不行瞻讽,我也不知道怎么解決。如果有好的方法可以告訴一下筷频。

第一種方式 :

將證書導(dǎo)入jdk中或加載證書

第二種方式:放棄對(duì)證書的校驗(yàn)

1.https 協(xié)議如果是tlsv1 導(dǎo)入下面三個(gè)jar

commons-logging-1.2.jar
org.apache.httpcomponents.httpclient_4.2.1.jar
org.apache.httpcomponents.httpcore_4.2.1.jar

2.下面兩個(gè)類是調(diào)用工具

package nc.bs.println.utils;

import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

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.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;


/** 
 * 繞過https證書認(rèn)證的方法
 */
public class SSLClient extends DefaultHttpClient{  

    public SSLClient() throws Exception{  

        super();  

        SSLContext ctx = SSLContext.getInstance("TLS");  
        
        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;  

                }  

        };  

        ctx.init(null, new TrustManager[]{tm}, null);  

//        SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
        SSLSocketFactory ssf = new SSLSocketFactory(ctx,new X509HostnameVerifier() {
            
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                // TODO Auto-generated method stub
                  return true;
            }
            
            @Override
            public void verify(String arg0, String[] arg1, String[] arg2) throws SSLException {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void verify(String arg0, X509Certificate arg1) throws SSLException {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void verify(String arg0, SSLSocket arg1) throws IOException {
                // TODO Auto-generated method stub
                
            }
        });  

        ClientConnectionManager ccm = this.getConnectionManager();  

        SchemeRegistry sr = ccm.getSchemeRegistry();  

        sr.register(new Scheme("https", 443, ssf));  

    }  

}  

調(diào)用方法

package nc.bs.println.utils;

import java.nio.charset.Charset;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;

/** 
 * 調(diào)用https接口工具類 
 */ 
public  class CRMHttpConnection{
    
    public static void main(String[] args) {
        String url="url";
        String json ="json";
        sendPost(json,url);
    }
    
    /**
     * 發(fā)送 post請(qǐng)求
     */
    @SuppressWarnings("resource")
    public static String sendPost(String json, String URL) {
//System.setProperty("javax.net.debug","ssl");
        String obj = null;
        // 創(chuàng)建默認(rèn)的httpClient實(shí)例.
        HttpClient httpclient = null;
        // 創(chuàng)建httppost
        HttpPost httppost = new HttpPost(URL);
//      httppost.addHeader("Content-type", "application/json; charset=utf-8");
        httppost.setHeader("Accept", "application/json");
        httppost.setHeader("x-zop-ns", "budget");
        httppost.setHeader("accept", "*/*");
        httppost.setHeader("connection", "Keep-Alive");
        httppost.setHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
        httppost.setHeader("Content-Type","application/json;charset=utf-8");
        try {
            httpclient = new SSLClient();
            StringEntity s = new StringEntity(json, Charset.forName("UTF-8")); // 對(duì)參數(shù)進(jìn)行編碼蚌成,防止中文亂碼
            s.setContentEncoding("UTF-8"); 
            httppost.setEntity(s);
            HttpResponse response = httpclient.execute(httppost);
            // 獲取相應(yīng)實(shí)體
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                obj = EntityUtils.toString(entity, "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj.toString();
    }
}

如果是tlsv1.2 如果是tlsv1.1 則在上面的基礎(chǔ)上

將 local_policy.jar 和 US_export_policy.jar 覆蓋到 ufjdk/jre/lib/security(NC服務(wù)所用的JDK) 文件夾下
jar下載地址
https://www.oracle.com/java/technologies/javase-jce7-downloads.html
上面兩個(gè)jar是 jdk1.7使用的。如果是1.5凛捏、1.6的jdk需要

1.5
jar下載地址
https://www.oracle.com/java/technologies/java-archive-downloads-java-plat-downloads.html#jce_policy-6-oth-JPR

1.6
https://www.oracle.com/java/technologies/java-archive-downloads-java-plat-downloads.html#jce_policy-6-oth-JPR

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末担忧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坯癣,更是在濱河造成了極大的恐慌瓶盛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示罗,死亡現(xiàn)場(chǎng)離奇詭異惩猫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚜点,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門轧房,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绍绘,你說我怎么就攤上這事奶镶。” “怎么了陪拘?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵厂镇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我左刽,道長(zhǎng)捺信,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任欠痴,我火速辦了婚禮迄靠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斋否。我一直安慰自己梨水,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布茵臭。 她就那樣靜靜地躺著疫诽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奇徒,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天雏亚,我揣著相機(jī)與錄音,去河邊找鬼摩钙。 笑死罢低,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胖笛。 我是一名探鬼主播网持,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼长踊!你這毒婦竟也來了功舀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤身弊,失蹤者是張志新(化名)和其女友劉穎辟汰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阱佛,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帖汞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凑术。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翩蘸。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淮逊,靈堂內(nèi)的尸體忽然破棺而出鹿鳖,到底是詐尸還是另有隱情,我是刑警寧澤壮莹,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站姻檀,受9級(jí)特大地震影響命满,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绣版,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一胶台、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杂抽,春花似錦诈唬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春阅仔,著一層夾襖步出監(jiān)牢的瞬間吹散,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工八酒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空民,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓羞迷,卻偏偏與公主長(zhǎng)得像界轩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衔瓮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容