最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java調用HTTPS接口的兩種方式及完整代碼

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

HTTPS是什么

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

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

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

SSL證書是什么

SSL證書是數字證書的一種,類似于駕駛 證、護照和營業(yè)執(zhí)照的電子副本。因為配置在服務器上,也稱為SSL服務器證書。

SSL 證書 就是遵守 SSL協議,由受信任的數字證書頒發(fā)機構CA,在驗證服務器身份后頒發(fā),具有服務器身份驗證和數據傳輸加密功能。

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

java調用https接口有兩種方式:

方法一:禁用證書認證,繞過SSL證書調用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證書驗證(僅測試環(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();
 
            // 設置請求頭
            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ā)送請求體
            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);
            }
 
            // 處理響應
            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();
        }
    }
}

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

方法二:安裝ssl證書,使用ssl認證調用https接口

具體步驟:

1 下載證書

使用瀏覽器打開接口地址,例如:https://www.baidu.com/,點擊地址左側的鎖,點擊正式-》詳細信息-》導出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 調用接口

證書安裝完成之后,即可正常調用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驗證配置
            // 恢復默認證書驗證機制
 
            // 創(chuàng)建連接
            URL url = new URL("https://...");
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
 
            // 創(chuàng)建SSL上下文使用默認信任管理器
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, null, null);
            connection.setSSLSocketFactory(sslContext.getSocketFactory());
            
            // 設置請求頭
            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ā)送請求體
            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);
            }
 
            // 處理響應
            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驗證失敗: " + e.getMessage());
            if(e.getCause() != null) {
                System.err.println("根因: " + e.getCause().getMessage());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

相關文章

  • Java實現多線程聊天室

    Java實現多線程聊天室

    這篇文章主要為大家詳細介紹了Java實現多線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java實現象棋算法的示例代碼

    Java實現象棋算法的示例代碼

    象棋算法包括搜索算法、評估函數和剪枝算法,本文主要介紹了Java實現象棋算法的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 詳解SpringBoot中異步請求的實現與并行執(zhí)行

    詳解SpringBoot中異步請求的實現與并行執(zhí)行

    這篇文章主要為大家詳細介紹了在SpringBoot中如何是實現異步請求、并行執(zhí)行,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • 如何在IDEA Maven項目中導入本地jar包的步驟

    如何在IDEA Maven項目中導入本地jar包的步驟

    今天小編就為大家分享一篇關于IDEA Maven項目中導入本地jar包的步驟,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 親手教你IDEA2020.3創(chuàng)建Javaweb項目的步驟詳解

    親手教你IDEA2020.3創(chuàng)建Javaweb項目的步驟詳解

    這篇文章主要介紹了IDEA2020.3創(chuàng)建Javaweb項目的步驟詳解,本文是小編手把手教你,通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-03-03
  • 解析Java中如何獲取Spring中配置的bean

    解析Java中如何獲取Spring中配置的bean

    本篇文章是對在Java中如何獲取Spring中配置的bean進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07
  • Java 中 synchronized的用法詳解(四種用法)

    Java 中 synchronized的用法詳解(四種用法)

    Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼。本文給大家介紹java中 synchronized的用法,對本文感興趣的朋友一起看看吧
    2015-11-11
  • Java線程池中的工作線程Worker類源碼解析

    Java線程池中的工作線程Worker類源碼解析

    這篇文章主要介紹了Java線程池中的工作線程Worker類源碼解析,線程池中的工作線程是通過內部類Worker表示的,Worker繼承自AbstractQueueSynchronizer,可以實現同步器的功能,需要的朋友可以參考下
    2023-12-12
  • SpringMVC通過注解實現全局異常處理問題小結

    SpringMVC通過注解實現全局異常處理問題小結

    文章介紹SpringMVC全局異常處理機制,通過@ControllerAdvice和@ExceptionHandler注解實現統一異常處理,提升代碼可維護性與響應一致性,減少重復try-catch代碼,增強系統健壯性,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 深入理解Java中的String(示例詳解)

    深入理解Java中的String(示例詳解)

    文章詳細介紹了Java中String類的特點、用途、主要方法以及常見用法,String類是不可變的,具有字符串常量池,特定的內存結構,并隨JDK版本更新而優(yōu)化,它廣泛用于表示和處理文本數據,并在內存管理和性能優(yōu)化方面表現出色,感興趣的朋友一起看看吧
    2025-03-03

最新評論

兰州市| 宁河县| 伊金霍洛旗| 桂东县| 特克斯县| 古浪县| 攀枝花市| 镇原县| 泗水县| 莒南县| 浑源县| 监利县| 衡东县| 新源县| 准格尔旗| 崇仁县| 米林县| 饶阳县| 巩义市| 高陵县| 房产| 成武县| 修水县| 武穴市| 赤壁市| 岱山县| 蛟河市| 额敏县| 宜川县| 达日县| 广灵县| 远安县| 涿鹿县| 资源县| 报价| 扎囊县| 崇明县| 伊宁县| 辰溪县| 乌审旗| 绵竹市|