Java中實現Http請求並獲取響應數據


前言

  • 在演示的功能代碼中使用的請求http地址為:http://timor.tech/api/holiday/year/

    接口說明:獲取指定年份或年月份的所有節假日信息。默認返回當前年份的所有信息。

    跳轉鏈接:免費節假日 API

  • 以上功能代碼僅在使用GET請求方式時測試通過,POST等其他請求時請自行嘗試。

  • 因未設置請求頭時也成功獲取了響應數據,所以未在演示代碼中添加請求頭信息,請求失敗時可自行添加請求頭信息后重試

方式一:功能實現類 java.net.HttpURLConnection

請求實現代碼:

package com.zhiyin.test;

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

public class MyTest {
    public static void main(String[] args) {
        test();
    }

    // HttpURLConnection方式
    public static void test() {
        String SUBMIT_METHOD_GET = "GET";  // 一定要是大寫,否則請求無效

        String urlStr = "http://timor.tech/api/holiday/year/";  // 請求http地址
        String param = "2020";  // 請求參數

        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;  // 返回結果字符串
        try {
            // 創建遠程url連接對象
            URL url = new URL(urlStr);
            // 通過遠程url連接對象打開一個連接,強轉成httpURLConnection類
            connection = (HttpURLConnection) url.openConnection();
            // 設置連接方式:GET
            connection.setRequestMethod(SUBMIT_METHOD_GET);
            // 設置連接主機服務器的超時時間:15000毫秒
            connection.setConnectTimeout(15000);
            // 設置讀取遠程返回的數據時間:60000毫秒
            connection.setReadTimeout(60000);
            // 發送請求
            connection.connect();
            // 通過connection連接,請求成功后獲取輸入流
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 封裝輸入流is,並指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // 存放數據
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                }
                result = sbf.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 釋放資源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            connection.disconnect();  // 關閉遠程連接
        }
        System.out.println("Successfully:" + result);
    }
}

方式二:功能實現類 org.apache.http.client.methods.HttpGet

maven項目中pom.xml文件里引入依賴:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

請求實現代碼:

package com.zhiyin.test;

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 java.io.InputStream;

public class MyTest {
    public static void main(String[] args) {
        test();
    }

    // HttpGet方式
    public static void test() {
        try {
            String urlStr = "http://timor.tech/api/holiday/year/";  // 請求http地址
            String param = "2020";  // 請求參數

            // 模擬(創建)一個瀏覽器用戶
            CloseableHttpClient client = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(urlStr + param);
            // httpclient進行連接
            CloseableHttpResponse response = client.execute(httpGet);
            // 獲取內容
            HttpEntity entity = response.getEntity();
            // 將內容轉化成IO流
            InputStream content = entity.getContent();
            // 輸入流轉換成字符串
            byte[] byteArr = new byte[content.available()];
            content.read(byteArr);  // 將輸入流寫入到字節數組中
            String result = new String(byteArr);
            System.out.println("Successfully:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM