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);
}
}