當前位置: 妍妍網 > 碼農

Java 實作 HTTP 請求的 4 種方式,最後一種用起來真優雅!

2024-03-25碼農

在日常工作和學習中,有很多地方都需要發送HTTP請求,本文以Java為例,總結發送HTTP請求的多種方式

HTTP請求實作過程:

GET

  • 建立遠端連線

  • 設定連線方式(get、post、put…)

  • 設定連線超時時間

  • 設定響應讀取時間

  • 發起請求

  • 獲取請求數據

  • 關閉連線

  • POST

  • 建立遠端連線

  • 設定連線方式(get、post、put。。。)

  • 設定連線超時時間

  • 設定響應讀取時間

  • 當向遠端伺服器傳送數據/寫數據時,需要設定為 true(setDoOutput)

  • 當前向遠端服務讀取數據時,設定為true,該參數可有可無( setDoInput

  • 設定傳入參數的格式:( setRequestProperty

  • 設定鑒權資訊: Authorization:(setRequestProperty)

  • 設定參數

  • 發起請求

  • 獲取請求數據

  • 關閉連線

  • 一、使用 HttpURLConnection 類

    HttpURLConnection 是 Java 標準庫中用來發送 HTTP 請求和接收 HTTP 響應的類。

    它預先定義了一些方法,如 setRequestMethod() setRequestProperty() getResponseCode() ,方便開發者自由地控制請求和響應。

    範例程式碼:

    import java.net.*;
    import java.io.*;
    public class HttpURLConnectionExample {
    private static HttpURLConnection con;
    public static void main(String[] args) throws Exception {
    URL url = new URL("https://www.example.com");
    con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("GET");
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer content = new StringBuffer();
    while ((inputLine = in.readLine()) != null) {
    content.append(inputLine);
    }
    in.close();
    con.disconnect();
    System.out.println(content.toString());
    }
    }


    二、使用 HttpClient 庫

    HttpClient 是一個 HTTP 客戶端庫,提供了向 HTTP 伺服器發送請求和處理響應的方法。

    它支持多種請求協定,如 GET、POST 等,並允許開發者自由地設定請求頭、請求參數、連線池等。HttpClient 還提供了基於執行緒池的異步請求處理方式。

    範例程式碼:

    import org.apache.http.HttpEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    public class HttpClientExample {
    public static void main(String[] args) throws Exception {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpget = new HttpGet("https://www.example.com");
    CloseableHttpResponse response = httpclient.execute(httpget);
    try {
    HttpEntity entity = response.getEntity();
    String result = EntityUtils.toString(entity);
    EntityUtils.consume(entity);
    System.out.println(result);
    } finally {
    response.close();
    }
    }
    }


    三、使用 Okhttp 庫

    Okhttp 是由 Square 公司開發的一款輕量級網路請求庫,支持普通的 HTTP/1.1 和 SPDY,可與 Retrofit 等網路請求框架搭配使用。

    範例程式碼:

    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    import java.io.IOException;
    public class OkhttpExample {
    private static final OkHttpClient client = new OkHttpClient();
    public static void main(String[] args) throws IOException {
    Request request = new Request.builder()
    .url("https://www.example.com")
    .build();
    try (Response response = client.newCall(request).execute()) {
    String result = response.body().string();
    System.out.println(result);
    }
    }
    }

    四、使用 Spring 的 RestTemplate

    RestTemplate 是 Spring 庫中用於存取 REST API 的類,它基於 HttpMessageConverter 介面,可以將 Java 物件轉換為請求參數或響應內容。

    RestTemplate 還支持各種 HTTP 請求方法、請求頭部客製、檔上傳和下載等操作。

    範例程式碼:

    public class HttpTemplate {
    public static String httpGet(String url) {
    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.exchange(url, HttpMethod.GET, null, String. class).getBody();
    return result;
    }
    public static String httpPost(String url, String name) {
    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.postForEntity(url, name, String. class).getBody();
    }
    public static void main(String str[]) {
    System.out.println(HttpTemplate.httpGet("https://www.example.com"));
    System.out.println(HttpTemplate.httpPost("https://www.example.com""ming"));
    }
    }

    註:上述範例程式碼,我們並沒有考慮網路請求可能失敗的情況。在實際套用中,需要對異常進行捕獲和處理。

    總結

    以上就是今天要講的內容,本文僅僅簡單介紹了 Java 中常見的幾種發送 HTTP 請求的方式,可以根據實際需要選擇合適的方式。

    來源:blog.csdn.net/qq_34383510/article/details/130627924

    >>

    END

    精品資料,超贊福利,免費領

    微信掃碼/長按辨識 添加【技術交流群

    群內每天分享精品學習資料

    最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎並行JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud訊息佇列等多個型別),歡迎您的使用。

    👇👇

    👇點選"閱讀原文",獲取更多資料(持續更新中