Java 發送 HTTP POST 請求的方法
使用 HttpURLConnection
(原生 Java 支持)
創建一個 HttpURLConnection
對象,設置請求方法為 POST,并寫入請求體數據。以下是一個簡單示例:
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpPostExample {public static void main(String[] args) throws Exception {String url = "https://example.com/api";String postData = "param1=value1?m2=value2";URL obj = new URL(url);HttpURLConnection con = (HttpURLConnection) obj.openConnection();con.setRequestMethod("POST");con.setDoOutput(true);try (OutputStream os = con.getOutputStream()) {byte[] input = postData.getBytes("utf-8");os.write(input, 0, input.length);}int responseCode = con.getResponseCode();System.out.println("Response Code: " + responseCode);}
}
使用 HttpClient
(Java 11+ 推薦)
HttpClient
是 Java 11 引入的現代化 HTTP 客戶端,支持異步和同步請求:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;public class HttpClientPostExample {public static void main(String[] args) throws Exception {HttpClient client = HttpClient.newHttpClient();String requestBody = "{\"key\":\"value\"}";HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://example.com/api")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(requestBody)).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}
}
使用第三方庫(如 OkHttp
)
OkHttp
是流行的第三方 HTTP 客戶端庫,簡化了請求處理:
import okhttp3.*;public class OkHttpPostExample {public static void main(String[] args) throws Exception {OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("application/json");String requestBody = "{\"key\":\"value\"}";Request request = new Request.Builder().url("https://example.com/api").post(RequestBody.create(requestBody, mediaType)).build();try (Response response = client.newCall(request).execute()) {System.out.println(response.body().string());}}
}
常見參數設置
- 請求頭:通過
setRequestProperty
或header()
方法添加,如Content-Type
。 - 超時設置:
HttpURLConnection
使用setConnectTimeout()
,HttpClient
通過Builder
配置。 - 表單數據:格式為
key1=value1&key2=value2
,需設置Content-Type: application/x-www-form-urlencoded
。 - JSON 數據:設置
Content-Type: application/json
,并發送 JSON 字符串。
錯誤處理
- 檢查響應狀態碼(如 200 表示成功)。
- 捕獲
IOException
處理網絡異常。 - 使用
try-with-resources
確保資源釋放。