Java拼接URL和HTTP请求

在开发过程中,经常需要使用Java来发送HTTP请求,获取远程服务器返回的数据。而拼接URL是实现HTTP请求的基础,它决定了请求的目标地址和参数。本文将介绍如何使用Java拼接URL和发送HTTP请求,并给出相应的代码示例。

URL的拼接

URL(Uniform Resource Locator)是用来标识特定资源的字符串,它包含了协议、主机名、端口号、路径和查询参数等信息。下面是一个URL的示例:


在Java中,可以使用java.net.URL类来表示URL,并使用其构造函数来拼接URL字符串。以下是一个拼接URL的示例代码:

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo {
    public static void main(String[] args) {
        try {
            String protocol = "http";
            String host = "www.example.com";
            int port = 8080;
            String path = "/path/to/resource";
            String query = "param1=value1&param2=value2";

            URL url = new URL(protocol, host, port, path + "?" + query);
            System.out.println(url.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们使用了URL类的构造函数来拼接URL字符串。首先,我们定义了协议、主机名、端口号、路径和查询参数等变量,然后将它们传递给URL类的构造函数。

HTTP请求的发送

发送HTTP请求需要使用Java的网络编程API,其中最常用的是java.net.HttpURLConnection类。该类提供了发送HTTP请求的方法,并可以获取服务器返回的响应。

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpGetDemo {
    public static void main(String[] args) {
        try {
            URL url = new URL("
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                System.out.println(response.toString());
            } else {
                System.out.println("HTTP request failed with response code: " + responseCode);
            }
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个URL对象,然后使用其openConnection()方法获取HttpURLConnection对象。接着,我们设置请求方法为GET,并获取服务器返回的响应码。

如果响应码为200,表示请求成功,我们可以通过getInputStream()方法获取服务器返回的输入流。通过BufferedReader逐行读取输入流的内容,并使用StringBuilder拼接成完整的响应字符串。

最后,记得关闭输入流和断开连接。

POST请求和请求参数的设置

除了GET请求,我们还经常需要发送POST请求,并添加请求参数。在POST请求中,请求参数通常以表单的形式传递,需要将参数拼接成一个字符串,并设置请求头的Content-Type为application/x-www-form-urlencoded

以下是一个使用HttpURLConnection发送POST请求的示例代码:

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

public class HttpPostDemo {
    public static void main(String[] args) {
        try {
            URL url = new URL("
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);

            String params = "param1=value1&param2=value2";
            byte[] postData = params.getBytes(StandardCharsets.UTF_8);
            int postDataLength = postData.length;
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));

            try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
                outputStream.write(postData);
            }

            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // similar to GET request
            } else {
                System