安卓使用java.net.HttpURLConnection封装http get post。

package com.xsh.rpgmvp2pngAndroid;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.nio.charset.StandardCharsets;

public class HttpUtils 
{ 
    /**
     * 带参数的 GET 请求
     * @param urlStr 基础 URL
     * @param params 参数 Map
     * @return 响应字符串
     */
    public static String get(String urlStr, Map<String, String> params) {
        try {
            // 构建带参数的 URL
            StringBuilder urlBuilder = new StringBuilder(urlStr);
            if (params != null && !params.isEmpty()) {
                urlBuilder.append("?");
                for (Map.Entry<String, String> param : params.entrySet()) {
                    urlBuilder.append(URLEncoder.encode(param.getKey(), StandardCharsets.UTF_8.name()))
                             .append("=")
                             .append(URLEncoder.encode(param.getValue(), StandardCharsets.UTF_8.name()))
                             .append("&");
                }
                // 移除最后一个 &
                urlBuilder.deleteCharAt(urlBuilder.length() - 1);
            }

            URL url = new URL(urlBuilder.toString());
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000); // 5秒超时
            connection.setReadTimeout(5000);

            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    response.append(line).append("\n");
                }
                reader.close();
                return response.toString().trim();
            } else {
                throw new IOException("HTTP 请求失败,状态码: " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "Error: " + e.getMessage();
        }
    }

    /**
     * 不带参数的 GET 请求(保留原方法)
     */
    public static String get(String url) {
        return get(url, null);
    }

    /**
     * 带参数的 POST 请求
     * @param urlStr 目标 URL
     * @param params POST 参数 Map
     * @return 响应字符串
     */
    public static String post(String urlStr, Map<String, String> params) {
        try {
            URL url = new URL(urlStr);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            // 设置请求头
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            // 如果有参数,写入请求体
            if (params != null && !params.isEmpty()) {
                StringBuilder postData = new StringBuilder();
                for (Map.Entry<String, String> param : params.entrySet()) {
                    postData.append(URLEncoder.encode(param.getKey(), StandardCharsets.UTF_8.name()))
                           .append("=")
                           .append(URLEncoder.encode(param.getValue(), StandardCharsets.UTF_8.name()))
                           .append("&");
                }
                // 移除最后一个 &
                if (postData.length() > 0) {
                    postData.deleteCharAt(postData.length() - 1);
                }

                DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
                outputStream.writeBytes(postData.toString());
                outputStream.flush();
                outputStream.close();
            }

            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    response.append(line).append("\n");
                }
                reader.close();
                return response.toString().trim();
            } else {
                throw new IOException("HTTP 请求失败,状态码: " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "Error: " + e.getMessage();
        }
    }

    /**
     * 不带参数的 POST 请求(保留原方法)
     */
    public static String post(String url) {
        return post(url, null);
    }
}

 

posted on 2026-01-12 19:26  小沙盒工作室  阅读(2)  评论(0)    收藏  举报