1. 程式人生 > 實用技巧 >java 原生http請求

java 原生http請求

java原生http請求的實現是依賴 java.net.URLConnection

post請求的demo

public class Main {

    public static void main(String[] args) {
        postDemo();
    }

    /**
     * POST請求
     */
    public static void postDemo() {
        try {
            // 請求的地址
            String spec = "http://localhost:9090/formTest";
            // 根據地址建立URL物件
            URL url = new URL(spec);
            // 根據URL物件開啟連結
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            // 設定請求方法
            urlConnection.setRequestMethod("POST");
            // 設定請求的超時時間
            urlConnection.setReadTimeout(5000);
            urlConnection.setConnectTimeout(5000);
            // 傳遞的資料
            String data = "name=" + URLEncoder.encode("aaa", "UTF-8")
                    + "&school=" + URLEncoder.encode("bbbb", "UTF-8");
            // 設定請求的頭
            urlConnection.setRequestProperty("Connection", "keep-alive");
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            urlConnection.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length));
            // 傳送POST請求必須設定允許輸出
            urlConnection.setDoOutput(true);
            // 傳送POST請求必須設定允許輸入
            urlConnection.setDoInput(true);
            //setDoInput的預設值就是true
            //獲取輸出流,將引數寫入
            OutputStream os = urlConnection.getOutputStream();
            os.write(data.getBytes());
            os.flush();
            os.close();
            urlConnection.connect();
            if (urlConnection.getResponseCode() == 200) {
                // 獲取響應的輸入流物件
                InputStream is = urlConnection.getInputStream();
                // 建立位元組輸出流物件
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                // 定義讀取的長度
                int len = 0;
                // 定義緩衝區
                byte[] buffer = new byte[1024];
                // 按照緩衝區的大小,迴圈讀取
                while ((len = is.read(buffer)) != -1) {
                    // 根據讀取的長度寫入到os物件中
                    byteArrayOutputStream.write(buffer, 0, len);
                }
                // 釋放資源
                is.close();
                byteArrayOutputStream.close();
                // 返回字串
                String result = new String(byteArrayOutputStream.toByteArray());
                System.out.println(result);

            } else {
                System.out.println("請求失敗");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}