Java发送HTTP GET请求

在Java中,我们可以使用多种方式发送HTTP GET请求。本文将介绍使用Java中的HttpURLConnection和HttpClient两种方法发送HTTP GET请求的示例代码,并解释其原理和用法。

HttpURLConnection

HttpURLConnection是Java标准库中提供的一个用于发送HTTP请求的类。它可以发送GET、POST、PUT、DELETE等各种类型的HTTP请求,本文只讨论发送GET请求的用法。

示例代码

下面是使用HttpURLConnection发送GET请求的示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpGetExample {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("

            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为GET
            connection.setRequestMethod("GET");

            // 设置请求头
            connection.setRequestProperty("User-Agent", "Mozilla/5.0");

            // 获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 读取响应内容
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            // 打印响应内容
            System.out.println("Response: " + response.toString());

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

原理解释

上述代码中,我们首先创建一个URL对象,指定了要发送GET请求的URL地址。然后使用openConnection方法打开连接并获得一个HttpURLConnection对象。接着,我们设置请求方法为GET,即setRequestMethod("GET")。可以根据需要设置其他请求头参数,例如setRequestProperty("User-Agent", "Mozilla/5.0")

获取响应码的代码connection.getResponseCode()可以用来判断请求是否成功。常见的响应码有200表示成功,404表示资源不存在,500表示服务器内部错误等。

读取响应内容的代码使用了InputStreamReaderBufferedReader来读取连接的输入流,并将其转化为字符串。通过connection.getInputStream()可以获取输入流。

最后,我们使用disconnect方法关闭连接。

HttpClient

HttpClient是Apache HttpComponents项目的一部分,它提供了更灵活、更高级的HTTP操作接口。使用HttpClient发送HTTP请求的代码相对于HttpURLConnection来说更简洁,特别适合在复杂场景中使用。

示例代码

下面是使用HttpClient发送GET请求的示例代码:

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class HttpClientGetExample {
    public static void main(String[] args) {
        try {
            // 创建HttpClient对象
            HttpClient httpClient = HttpClientBuilder.create().build();

            // 创建HttpGet对象
            HttpGet httpGet = new HttpGet("

            // 设置请求头
            httpGet.addHeader("User-Agent", "Mozilla/5.0");

            // 发送请求并获取响应
            HttpResponse response = httpClient.execute(httpGet);

            // 获取响应码
            int responseCode = response.getStatusLine().getStatusCode();
            System.out.println("Response Code: " + responseCode);

            // 读取响应内容
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println("Response: " + responseBody);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

原理解释

上述代码中,我们首先创建一个HttpClient对象,使用HttpClientBuilder.create().build()来创建一个默认的HttpClient实例。然后,创建一个HttpGet对象,指定了要发送GET请求的URL地址。我们可以通过addHeader方法设置请求头参数。

使用httpClient.execute(httpGet)方法发送请求并获取响应。通过response.getStatusLine().getStatusCode()可以获取响应码,通过EntityUtils.toString(response.getEntity())可以获取响应内容。

类图

下面是HttpURLConnection和HttpClient的类图:

classDiagram
    HttpURLConnection <|-- HttpGetExample
    HttpClient <|-- HttpClientGetExample

总结

本文介绍了使用Java中的HttpURLConnection和HttpClient两种方式发送HTTP