逆战策士 - 专精游戏活动策略库
首页收益排行正文

Java HTTP GET/POST 请求

2025-10-07 20:30:10

本教程显示了如何使用 Java 发送 GET 和 POST 请求。 我们使用内置的HttpURLConnection类以及标准的 Java 和 Apache HttpClient类。

HTTP

超文本传输​​协议( HTTP )是用于分布式协作超媒体信息系统的应用协议。 HTTP 是万维网数据通信的基础。

在示例中,我们使用httpbin.org(这是一个免费的 HTTP 请求和响应服务),以及webcode.me(这是一个用于测试的小型 HTML 页面)。

HTTP GET

HTTP GET 方法请求指定资源的表示形式。 使用 GET 的请求应仅检索数据。

HTTP POST

HTTP POST 方法将数据发送到服务器。 在上载文件或提交完整的 Web 表单时,通常使用它。

Java 11 HttpClient的 GET 请求

从 Java 11 开始,我们可以使用java.net.http.HttpClient。

com/zetcode/GetRequestJava11.java

package com.zetcode;

import java.io.IOException;

import java.net.URI;

import java.net.http.HttpClient;

import java.net.http.HttpRequest;

import java.net.http.HttpResponse;

public class GetRequestJava11 {

public static void main(String[] args) throws IOException, InterruptedException {

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()

.uri(URI.create("http://webcode.me"))

.build();

HttpResponse response = client.send(request,

HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

}

}

我们向webcode.me网页创建 GET 请求。

HttpClient client = HttpClient.newHttpClient();

使用newHttpClient()工厂方法创建一个新的HttpClient。

HttpRequest request = HttpRequest.newBuilder()

.uri(URI.create("http://webcode.me"))

.build();

我们建立对该网页的同步请求。 默认方法是 GET。

HttpResponse response = client.send(request,

HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

我们发送请求并检索响应的内容,然后将其打印到控制台。

My html page

Today is a beautiful day. We go swimming and fishing.

Hello there. How are you?

这是输出。

Java 11 HttpClient的 Java HTTP POST 请求

下一个示例使用 Java 11 HttpClient 创建 POST 请求。

com.fasterxml.jackson.core

jackson-databind

2.9.9.3

我们需要jackson-databind依赖项。

com/zetcode/PostRequestJava11.java

package com.zetcode;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

import java.net.URI;

import java.net.http.HttpClient;

import java.net.http.HttpRequest;

import java.net.http.HttpResponse;

import java.util.HashMap;

public class HttpClientPost {

public static void main(String[] args) throws IOException, InterruptedException {

var values = new HashMap() {{

put("name", "John Doe");

put ("occupation", "gardener");

}};

var objectMapper = new ObjectMapper();

String requestBody = objectMapper

.writeValueAsString(values);

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()

.uri(URI.create("https://httpbin.org/post"))

.POST(HttpRequest.BodyPublishers.ofString(requestBody))

.build();

HttpResponse response = client.send(request,

HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

}

}

我们将 POST 请求发送到https://httpbin.org/post页面。

var values = new HashMap() {{

put("name", "John Doe");

put ("occupation", "gardener");

}};

var objectMapper = new ObjectMapper();

String requestBody = objectMapper

.writeValueAsString(values);

首先,我们使用 Jackson 的ObjectMapper构建请求主体。

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()

.uri(URI.create("https://httpbin.org/post"))

.POST(HttpRequest.BodyPublishers.ofString(requestBody))

.build();

我们构建 POST 请求。 使用BodyPublishers.ofString()创建一个新的BodyPublisher。 它将高级 Java 对象转换为适合作为请求正文发送的字节缓冲区流。

HttpResponse response = client.send(request,

HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

我们发送请求并检索响应。

{

"args": {},

"data": "{\"occupation\":\"gardener\",\"name\":\"John Doe\"}",

"files": {},

"form": {},

"headers": {

"Content-Length": "43",

"Host": "httpbin.org",

"User-Agent": "Java-http-client/12.0.1"

},

"json": {

"name": "John Doe",

"occupation": "gardener"

},

...

"url": "https://httpbin.org/post"

}

This is the output.

使用HttpURLConnection的 Java HTTP GET 请求

以下示例使用HttpURLConnection创建 GET 请求。

com/zetcode/JavaGetRequest.java

package com.zetcode;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

public class JavaGetRequest {

private static HttpURLConnection con;

public static void main(String[] args) throws IOException {

var url = "http://webcode.me";

try {

var myurl = new URL(url);

con = (HttpURLConnection) myurl.openConnection();

con.setRequestMethod("GET");

StringBuilder content;

try (BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream()))) {

String line;

content = new StringBuilder();

while ((line = in.readLine()) != null) {

content.append(line);

content.append(System.lineSeparator());

}

}

System.out.println(content.toString());

} finally {

con.disconnect();

}

}

}

该示例使用 HTTP GET 请求检索网页。

var url = "http://webcode.me";

我们检索此小型网页的内容。

var myurl = new URL(url);

con = (HttpURLConnection) myurl.openConnection();

创建到指定 URL 的连接。

con.setRequestMethod("GET");

我们使用setRequestMethod()方法设置请求方法类型。

try (BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream()))) {

输入流是从 HTTP 连接对象创建的。 输入流用于读取返回的数据。

content = new StringBuilder();

我们使用StringBuilder构建内容字符串。

while ((line = in.readLine()) != null) {

content.append(line);

content.append(System.lineSeparator());

}

我们使用readLine()逐行从输入流中读取数据。 每行都添加到StringBuilder中。 在每行之后,我们附加一个与系统有关的行分隔符。

System.out.println(content.toString());

我们将内容打印到终端。

使用HttpURLConnection的 Java HTTP POST 请求

以下示例使用HttpURLConnection创建 POST 请求。

com/zetcode/JavaPostRequest.java

package com.zetcode;

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.nio.charset.StandardCharsets;

public class JavaPostRequest {

private static HttpURLConnection con;

public static void main(String[] args) throws IOException {

var url = "https://httpbin.org/post";

var urlParameters = "name=Jack&occupation=programmer";

byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

try {

var myurl = new URL(url);

con = (HttpURLConnection) myurl.openConnection();

con.setDoOutput(true);

con.setRequestMethod("POST");

con.setRequestProperty("User-Agent", "Java client");

con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

try (var wr = new DataOutputStream(con.getOutputStream())) {

wr.write(postData);

}

StringBuilder content;

try (var br = new BufferedReader(

new InputStreamReader(con.getInputStream()))) {

String line;

content = new StringBuilder();

while ((line = br.readLine()) != null) {

content.append(line);

content.append(System.lineSeparator());

}

}

System.out.println(content.toString());

} finally {

con.disconnect();

}

}

}

该示例将 POST 请求发送到https://httpbin.org/post。

var urlParameters = "name=Jack&occupation=programmer";

byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

我们将编写这两个键/值对。 我们将字符串转换为字节数组。

var myurl = new URL(url);

con = (HttpURLConnection) myurl.openConnection();

URL 的连接已打开。

con.setDoOutput(true);

通过setDoOutput()方法,我们指示我们将数据写入 URL 连接。

con.setRequestMethod("POST");

HTTP 请求类型通过setRequestMethod()设置。

con.setRequestProperty("User-Agent", "Java client");

我们使用setRequestProperty()方法设置用户年龄属性。

try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {

wr.write(postData);

}

我们将字节或数据写入 URL 连接。

StringBuilder content;

try (var br = new BufferedReader(

new InputStreamReader(con.getInputStream()))) {

String line;

content = new StringBuilder();

while ((line = br.readLine()) != null) {

content.append(line);

content.append(System.lineSeparator());

}

}

System.out.println(content.toString());

我们读取连接的输入流,并将检索到的内容写入控制台。

使用 Apache HttpClient的 Java HTTP GET 请求

以下示例使用 Apache HttpClient创建 GET 请求。

org.apache.httpcomponents

httpclient

4.5.10

对于示例,我们需要此 Maven 依赖关系。

com/zetcode/ApacheHttpClientGet.java

package com.zetcode;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

public class ApacheHttpClientGet {

public static void main(String[] args) throws IOException {

try (CloseableHttpClient client = HttpClientBuilder.create().build()) {

var request = new HttpGet("http://webcode.me");

HttpResponse response = client.execute(request);

var bufReader = new BufferedReader(new InputStreamReader(

response.getEntity().getContent()));

var builder = new StringBuilder();

String line;

while ((line = bufReader.readLine()) != null) {

builder.append(line);

builder.append(System.lineSeparator());

}

System.out.println(builder);

}

}

}

该示例发送 GET 请求以读取指定网页的主页。

try (CloseableHttpClient client = HttpClientBuilder.create().build()) {

CloseableHttpClient是使用HttpClientBuilder构建的。

var request = new HttpGet("http://webcode.me");

HttpGet用于创建 HTTP GET 请求。

HttpResponse response = client.execute(request);

我们执行请求并获得响应。

var bufReader = new BufferedReader(new InputStreamReader(

response.getEntity().getContent()));

从响应对象中,我们读取内容。

while ((line = bufReader.readLine()) != null) {

builder.append(line);

builder.append(System.lineSeparator());

}

我们逐行读取内容并动态生成字符串消息。

Java HTTP POST 与 Apache HttpClient

以下示例使用HttpPost创建 POST 请求。

com/zetcode/ApacheHttpClientPost.java

package com.zetcode;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

public class ApacheHttpClientPost {

public static void main(String[] args) throws IOException {

try (CloseableHttpClient client = HttpClientBuilder.create().build()) {

var request = new HttpPost("https://httpbin.org/post");

request.setHeader("User-Agent", "Java client");

request.setEntity(new StringEntity("My test data"));

HttpResponse response = client.execute(request);

var bufReader = new BufferedReader(new InputStreamReader(

response.getEntity().getContent()));

var builder = new StringBuilder();

String line;

while ((line = bufReader.readLine()) != null) {

builder.append(line);

builder.append(System.lineSeparator());

}

System.out.println(builder);

}

}

}

The example sends a POST request to https://httpbin.org/post.

var request = new HttpPost("https://httpbin.org/post");

HttpPost用于创建 POST 请求。

request.setEntity(new StringEntity("My test data"));

用setEntity()方法设置数据。

request.setHeader("User-Agent", "Java client");

我们使用setHeader()方法为请求设置标头。

HttpResponse response = client.execute(request);

我们执行请求并获得响应。

var bufReader = new BufferedReader(new InputStreamReader(

response.getEntity().getContent()));

var builder = new StringBuilder();

String line;

while ((line = bufReader.readLine()) != null) {

builder.append(line);

builder.append(System.lineSeparator());

}

System.out.println(builder);

我们阅读响应并将其打印到终端。

在本教程中,我们使用HttpURLConnection以及标准 Java 和 Apache HttpClient在 Java 中创建了 GET 和 POST 请求。

挖空混合 网易云音乐怎么注销账号 网易云音乐注销账号方法【教程详解】
相关内容