欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java調(diào)用HTTPS接口的兩種方式及完整代碼

 更新時(shí)間:2025年05月30日 10:22:06   作者:ssxueyi  
HTTPS是以安全為目標(biāo)的HTTP通道,在HTTP的基礎(chǔ)上通過傳輸加密和身份認(rèn)證保證了傳輸過程的安全性 ,HTTPS在HTTP的基礎(chǔ)下加SSL,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL,本文給大家介紹了Java調(diào)用https接口的兩種方式及完整代碼,需要的朋友可以參考下

HTTPS是什么

HTTPS (全稱:Hypertext Transfer Protocol Secure),是以安全為目標(biāo)的 HTTP 通道,在HTTP的基礎(chǔ)上通過傳輸加密和身份認(rèn)證保證了傳輸過程的安全性 。HTTPS 在HTTP 的基礎(chǔ)下加入SSL,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細(xì)內(nèi)容就需要 SSL。 HTTPS 存在不同于 HTTP 的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在 HTTP與 TCP 之間)。這個(gè)系統(tǒng)提供了身份驗(yàn)證與加密通訊方法。它被廣泛用于萬維網(wǎng)上安全敏感的通訊,例如交易支付等方面 。

HTTPS不是協(xié)議,而是通過SSL/TLS協(xié)議 提供的安全連接進(jìn)行的HTTP通信。最初,它被用于安全很重要的通信,例如在互聯(lián)網(wǎng)上傳輸個(gè)人信息和電子支付。 隨后,由于公共無線局域網(wǎng)的普及、PRISM的大規(guī)模竊 聽以及中間人攻擊的風(fēng)險(xiǎn)增加, 用HTTPS取代單純的HTTP通信越來越多。

與以純文本形式發(fā)送和接收消息的標(biāo)準(zhǔn) HTTP 不同,HTTPS 使用SSL/TLS等協(xié)議對(duì)服務(wù)器進(jìn)行身份驗(yàn)證、加密通信內(nèi)容和檢測(cè)篡改。 這樣可以防止欺騙、中間人攻擊和竊 聽等攻擊。

SSL證書是什么

SSL證書是數(shù)字證書的一種,類似于駕駛 證、護(hù)照和營(yíng)業(yè)執(zhí)照的電子副本。因?yàn)榕渲迷诜?wù)器上,也稱為SSL服務(wù)器證書。

SSL 證書 就是遵守 SSL協(xié)議,由受信任的數(shù)字證書頒發(fā)機(jī)構(gòu)CA,在驗(yàn)證服務(wù)器身份后頒發(fā),具有服務(wù)器身份驗(yàn)證和數(shù)據(jù)傳輸加密功能。

SSL證書通過在客戶端瀏覽器和Web服務(wù)器之間建立一條SSL安全通道(Secure socket layerSSL)安全協(xié)議是由Netscape Communication公司設(shè)計(jì)開發(fā)。該安全協(xié)議主要用來提供對(duì)用戶和服務(wù)器的認(rèn)證;對(duì)傳送的數(shù)據(jù)進(jìn)行加密和隱藏;確保數(shù)據(jù)在傳送中不被改變,即數(shù)據(jù)的完整性,現(xiàn)已成為該領(lǐng)域中全球化的標(biāo)準(zhǔn)。由于SSL技術(shù)已建立到所有主要的瀏覽器和WEB服務(wù)器程序中,因此,僅需安裝服務(wù)器證書就可以激活該功能了,即通過它可以激活SSL協(xié)議,實(shí)現(xiàn)數(shù)據(jù)信息在客戶端和服務(wù)器之間的加密傳輸,可以防止數(shù)據(jù)信息的泄露,保證了雙方傳遞信息的安全性,而且用戶可以通過服務(wù)器證書驗(yàn)證他所訪問的網(wǎng)站是否是真實(shí)可靠。數(shù)字簽名又名數(shù)字標(biāo)識(shí)、簽章 (即 Digital Certificate,Digital ID ),提供了一種在網(wǎng)上進(jìn)行身份驗(yàn)證的方法,是用來標(biāo)志和證明網(wǎng)絡(luò)通信雙方身份的數(shù)字信息文件。

java調(diào)用https接口有兩種方式:

方法一:禁用證書認(rèn)證,繞過SSL證書調(diào)用https接口

完整代碼如下:

import java.io.*;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
 
public class HttpClientExample {
 
    public static void main(String[] args) {
        try {
            // 禁用SSL證書驗(yàn)證(僅測(cè)試環(huán)境使用)
            TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
                    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
                    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
                }
            };
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 
            // 創(chuàng)建連接
            URL url = new URL("https://......");
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
 
            // 設(shè)置請(qǐng)求頭
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Authorization", "");
            System.out.println("Request Headers:");
            connection.getRequestProperties().forEach((k,v) -> System.out.println(k + "=" + v));
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);
 
            // 發(fā)送請(qǐng)求體
            String jsonInputString = "";
            try(OutputStream os = connection.getOutputStream()) {
                byte[] input = jsonInputString.getBytes("utf-8");
                os.write(input, 0, input.length);
                System.out.println("Request Body Sent: " + jsonInputString);
            }
 
            // 處理響應(yīng)
            int statusCode = connection.getResponseCode();
            System.out.println("Response Code: " + statusCode);
 
            try(BufferedReader br = new BufferedReader(
                new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response Body: " + response.toString());
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

這種方式不安全。而且如果接口配置了必須使用證書,則無法調(diào)用成功,所以不推薦這種方式。

方法二:安裝ssl證書,使用ssl認(rèn)證調(diào)用https接口

具體步驟:

1 下載證書

使用瀏覽器打開接口地址,例如:https://www.baidu.com/,點(diǎn)擊地址左側(cè)的鎖,點(diǎn)擊正式-》詳細(xì)信息-》導(dǎo)出baidu.crt

2 安裝證書

Windows安裝證書(jdk路徑替換為自己的)命令:

keytool -import -alias zhengzhoubus -keystore "D:\pro\jdk1.8.0_181\jre\lib\security\cacerts" -file E:\cert\zhengzhoubus.crt -storepass changeit

linux安裝證書(jdk路徑替換為自己的)命令:

sudo keytool -import -alias zhengzhoubus -keystore /usr/java/jdk1.8.0_301/jre/lib/security/cacerts -file /opt/certs/zhengzhoubus.crt -storepass changeit

查看證書(jdk路徑替換為自己的):

keytool -list -keystore "D:\pro\jdk1.8.0_181\jre\lib\security\cacerts" -storepass changeit

3 調(diào)用接口

證書安裝完成之后,即可正常調(diào)用https接口,完整代碼如下:

import java.io.*;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
//import javax.net.ssl.TrustManager;
//import javax.net.ssl.X509TrustManager;
 
public class HttpClientExample {
 
    public static void main(String[] args) {
        try {
            // 刪除自定義SSL驗(yàn)證配置
            // 恢復(fù)默認(rèn)證書驗(yàn)證機(jī)制
 
            // 創(chuàng)建連接
            URL url = new URL("https://...");
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
 
            // 創(chuàng)建SSL上下文使用默認(rèn)信任管理器
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, null, null);
            connection.setSSLSocketFactory(sslContext.getSocketFactory());
            
            // 設(shè)置請(qǐng)求頭
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Authorization", "");
            System.out.println("Request Headers:");
            connection.getRequestProperties().forEach((k,v) -> System.out.println(k + "=" + v));
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);
 
            // 發(fā)送請(qǐng)求體
            String jsonInputString = "";
            try(OutputStream os = connection.getOutputStream()) {
                byte[] input = jsonInputString.getBytes("utf-8");
                os.write(input, 0, input.length);
                System.out.println("Request Body Sent: " + jsonInputString);
            }
 
            // 處理響應(yīng)
            int statusCode = connection.getResponseCode();
            System.out.println("Response Code: " + statusCode);
 
            try(BufferedReader br = new BufferedReader(
                new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response Body: " + response.toString());
            }
 
        } catch (javax.net.ssl.SSLHandshakeException e) {
            System.err.println("SSL驗(yàn)證失敗: " + e.getMessage());
            if(e.getCause() != null) {
                System.err.println("根因: " + e.getCause().getMessage());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

到此這篇關(guān)于Java調(diào)用https接口的兩種方式及完整代碼的文章就介紹到這了,更多相關(guān)Java調(diào)用https接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 移除元素Java實(shí)現(xiàn)方式

    移除元素Java實(shí)現(xiàn)方式

    這篇文章主要介紹了移除元素Java實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • springmvc視圖解析流程代碼實(shí)例

    springmvc視圖解析流程代碼實(shí)例

    這篇文章主要介紹了springmvc視圖解析流程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java獲取文件的類型和擴(kuò)展名的實(shí)現(xiàn)方法

    Java獲取文件的類型和擴(kuò)展名的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java獲取文件的類型和擴(kuò)展名的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringDataJpa如何使用union多表分頁條件查詢

    SpringDataJpa如何使用union多表分頁條件查詢

    這篇文章主要介紹了SpringDataJpa如何使用union多表分頁條件查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題

    解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題

    這篇文章主要介紹了解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解

    spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • springboot部署linux訪問服務(wù)器資源的方法

    springboot部署linux訪問服務(wù)器資源的方法

    這篇文章主要介紹了springboot部署linux訪問服務(wù)器資源,部署springboot項(xiàng)目至服務(wù)器用了幾種不同方法,文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-12-12
  • Java圖形用戶界面設(shè)計(jì)(Swing)的介紹

    Java圖形用戶界面設(shè)計(jì)(Swing)的介紹

    看到多數(shù)人提到 Java 就以為是網(wǎng)絡(luò)開發(fā),其實(shí)不是這樣的,Java 也可以開發(fā)應(yīng)用程序,而且可以開發(fā)出漂亮的圖形用戶界面的應(yīng)用程序,因此,我寫下這篇文章,希望能帶你進(jìn)入 Java 圖形用戶界面設(shè)計(jì)之門。
    2016-07-07
  • 深入理解SpringBoot的配置環(huán)境屬性

    深入理解SpringBoot的配置環(huán)境屬性

    SpringBoot的配置環(huán)境屬性是一種強(qiáng)大的工具,可以幫助我們配置和管理我們的應(yīng)用程序,這篇文章主要介紹了SpringBoot的配置環(huán)境屬性,需要的朋友可以參考下
    2023-07-07
  • java 使用JDOM解析xml文件

    java 使用JDOM解析xml文件

    java中如何使用JDOM解析xml文件呢?以下小編就用實(shí)例為大家詳細(xì)的介紹一下。需要的朋友可以參考下
    2013-07-07

最新評(píng)論