[JavaSE コラム 91] Java はどのようにして Http および Https リクエストをアクティブに開始するのでしょうか?

著者のホームページ:デザイナー Xiao Zheng
著者の簡単な紹介: JAVA テクノロジ、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに専念、CSDN カレッジおよび Blue Bridge クラウド コースの認定講師。
主な方向: Vue、SpringBoot、WeChat アプレット

この記事では、Java を使用して HTTP リクエストを開始する方法を説明し、サンプル コードを示します。HTTP は、Web ブラウザと Web サーバーの間でデータを送信するために使用されるプロトコルです。Java は、サードパーティ ツールを通じて HTTP リクエストを開始できます。

ここに画像の説明を挿入します


1. http と https とは何ですか?

HTTP は、Web ブラウザと Web サーバー間でデータを転送するためのプロトコルです。

HTTP はステートレスな接続指向のプロトコルで、トランスポート プロトコルとして TCP を使用し、デフォルトで80 80で実行されます。ポート80HTTP は请求-响应このモデルを使用し、クライアントは HTTP リクエストをサーバーに送信し、サーバーはリクエストに従って対応する HTTP 応答を返します。

HTTPS は暗号化された HTTP プロトコルです。SSL または TLS プロトコルを使用して HTTP 通信を暗号化し、送信中のデータのセキュリティを確保します。

HTTPS は、HTTP に暗号化機能と認証機能を追加し、送信中のデータの安全性と信頼性を高めます

クライアントが HTTPS リクエストを開始すると、サーバーは公開キー証明書を返し、クライアントはサーバーの公開キーを使用して通信を暗号化します。

通信プロセス中、サーバーは秘密キーを使用してクライアントによって送信されたデータを復号化し、クライアントはサーバーの公開キーを使用して送信されたデータを暗号化します。

これにより、たとえ誰かが通信データを傍受したとしても、内容を復号化することはできず、データの機密性と完全性が保護されます。

HTTPS は、銀行取引、電子商取引、ソーシャル メディアなど、機密情報の送信を保護する必要がある Web サイトでよく使用されます。

HTTPSを利用することで、盗聴、改ざん、なりすましなどのネットワーク攻撃を効果的に防止でき、データ通信のセキュリティが向上します。

ここに画像の説明を挿入します


2. http リクエストを開始する方法

Java では、HTTP リクエストを開始するために、java.net.HttpURLConnectionまたはサードパーティ ライブラリ ( など)を使用できます。以下は、HTTPリクエストを開始するために使用するサンプル コードです。コピーしてローカルに実行してください。Apache HttpClientOkHttpjava.net.HttpURLConnectionGET

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpExample {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            // 创建URL对象
            URL url = new URL("http://api.example.com/data"); // 替换为实际的URL

            // 打开HTTP连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为GET
            connection.setRequestMethod("GET");

            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
    
    
                response.append(line);
            }
            reader.close();

            // 打印响应内容
            System.out.println("Response Body: " + response.toString());

            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

この例では、まず URL オブジェクトを作成し、リクエストする URL を指定します。

次に、url.openConnection()経由で HTTP 接続を開き、それをHttpURLConnectionオブジェクトにキャストします。

GET次に、リクエスト メソッド (など)を設定しPOST、レスポンスのステータス コードを取得し、レスポンスの内容を読み取って対応する処理を実行し、最後に接続を閉じます。

実際の HTTP リクエストでは、より多くのリクエスト ヘッダー、リクエストボディ、レスポンス ヘッダー、その他の情報を処理する必要がある場合がありますが、サードパーティのライブラリを使用すると、より多くの機能と利便性を提供できます。

ここに画像の説明を挿入します


3. httpsリクエストの開始方法

Java では、HttpsURLConnectionクラスを使用して HTTPS リクエストを開始できます。以下はリクエストのHttpsURLConnection開始に使用するGETサンプル コードです。コピーしてローカルに実行してください。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

public class HttpsExample {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            // 创建信任管理器
            TrustManager[] trustAllCerts = new TrustManager[] {
    
     new X509TrustManager() {
    
    
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
    
    }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
    
    }
                public X509Certificate[] getAcceptedIssuers() {
    
     return null; }
            }};
            
            // 获取默认的SSL上下文
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
            
            // 创建URL对象
            URL url = new URL("https://api.example.com/data"); // 替换为实际的URL
            
            // 打开HTTPS连接
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
            
            // 设置请求方法为GET
            connection.setRequestMethod("GET");
            
            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);
            
            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
    
    
                response.append(line);
            }
            reader.close();
            
            // 打印响应内容
            System.out.println("Response Body: " + response.toString());
            
            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

すべての証明書を信頼する操作を実装するトラスト マネージャーを作成します。

次に、デフォルトの SSL コンテキストを取得し、その SSL コンテキストにトラスト マネージャーを適用します。

次に、URL オブジェクトを作成し、url.openConnection()それとの HTTPS 接続を開き、それをHttpsURLConnectionオブジェクトにキャストします。

GET次に、リクエスト メソッド (など)を設定しPOST、レスポンス ステータス コードを取得し、レスポンスの内容を読み取ってそれに応じて処理し、最後に接続を閉じます。

このサンプル コード内のすべての証明書を信頼する操作は安全ではなく、テスト環境または開発環境にのみ適用されます。運用環境では、検証に実際の証明書と信頼できる証明書チェーンを使用することをお勧めします。

ここに画像の説明を挿入します


4. httpリクエストのステータスコードとデータ分析

JavaHttpURLConnectionまたはサードパーティのライブラリを使用して、HTTP リクエストを開始し、応答ステータス コードとデータを取得できます。

まず、HTTP リクエストを開始してレスポンスのステータス コードを取得するには、次のコードを使用します。コピーしてローカルで実行してください。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpExample {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            // 创建URL对象
            URL url = new URL("http://api.example.com/data");

            // 打开HTTP连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // 设置请求方法为GET
            connection.setRequestMethod("GET");
            
            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);
            
            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
    
    
                response.append(line);
            }
            reader.close();
            
            // 打印响应内容
            System.out.println("Response Body: " + response.toString());
            
            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードはURLオブジェクトを作成し、url.openConnection()を使用して HTTP 接続を開き、リクエスト メソッドを に設定しますGET

次に、connection.getResponseCode()を介して応答のステータス コードを取得し、 をconnection.getInputStream()介して応答の入力ストリームを取得し、 を使用してBufferedReader応答の内容を 1 行ずつ読み取り、最後に応答の内容を出力して接続を閉じます。

次に、データの解析ですが、応答データをどのように解析するかは、データの形式 (JSON、XML、HTML など) や使用するライブラリによって異なります。

一般的に使用されるデータ解析ライブラリは次JSONObjectのとおりです: JSONArray(JSON データの処理)、SAXParser( DOMParserXML データの処理)、Jsoup(HTML データの処理)。もちろん、他にも多くのサードパーティ ライブラリから選択できます。

JSONObjectここでは、学生に参考として JSON データの解析を使用する例を示します。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonExample {
    
    
    public static void main(String[] args) {
    
    
        String jsonData = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";

        try {
    
    
            JSONObject jsonObject = new JSONObject(jsonData);
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            String city = jsonObject.getString("city");

            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
            System.out.println("City: " + city);
        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードは、JSON 文字列を解析しJSONObjectgetString(key)や などgetInt(key)のメソッドを通じて対応するフィールドの値を取得します。

ここに画像の説明を挿入します


5. http リクエストのインタビューの質問

  1. Java で HTTP リクエストがどのように機能するかを説明してください。
  2. Java で HTTP リクエストを送信するためによく使用されるクラスとライブラリを紹介してください。
  3. 一般的な HTTP リクエスト メソッドは何ですか? 意味や使い方を教えてください。
  4. JavaでGETリクエストを送信するにはどうすればよいですか? サンプルコードを教えてください。
  5. JavaでPOSTリクエストを送信するにはどうすればよいですか? サンプルコードを教えてください。
  6. HTTP リクエストへの応答をどのように処理するか? ステータスコードとレスポンスのデータを取得するにはどうすればよいですか?
  7. HTTP ステータス コードについて説明してください。一般的なステータス コードとその意味は何ですか?
  8. Java で HTTP リクエストの例外とエラーを処理するにはどうすればよいですか?
  9. HTTP リクエストのリクエスト ヘッダーとリクエスト パラメータを設定するにはどうすればよいですか?
  10. Java で HTTP リクエストのタイムアウトと再試行を処理するにはどうすればよいですか?

6. まとめ

この記事では、Java を使用して HTTP リクエストを開始する方法を説明し、サンプル コードを示します91 9191 のJava SE 入門チュートリアルがリリースされました。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41464123/article/details/132570383