Java Post 请求带参数

在网络开发中,我们经常需要向服务器发送 Post 请求,并且可能需要在请求中添加一些参数。本文将介绍如何使用 Java 进行 Post 请求,并在请求中传递参数。

HttpURLConnection 类

在 Java 中,我们可以使用 java.net.HttpURLConnection 类来进行网络请求。这个类提供了各种方法来发送请求并接收响应。下面是一个简单的示例,展示了如何使用 HttpURLConnection 发送一个简单的 Post 请求:

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class PostRequestExample {

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

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

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

            // 启用请求的输出,默认为 false
            connection.setDoOutput(true);

            // 设置请求的参数
            String parameters = "param1=value1&param2=value2";
            DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.writeBytes(parameters);
            outputStream.flush();
            outputStream.close();

            // 获取响应码
            int responseCode = connection.getResponseCode();

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            // TODO: 处理响应内容

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

在上述代码中,我们首先创建了一个 URL 对象来表示要发送请求的目标地址。然后,我们打开 URL 连接,并将请求方法设置为 POST。接下来,我们启用请求的输出,并将参数写入请求的输出流中。最后,我们获取响应码和响应内容,并关闭连接。

使用表格传递参数

有时候,我们需要向服务器发送更复杂的参数,例如包含多个字段的对象。在这种情况下,我们可以使用表格来传递参数。下面是使用表格传递参数的示例代码:

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class PostRequestWithFormDataExample {

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

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

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

            // 启用请求的输出,默认为 false
            connection.setDoOutput(true);

            // 设置请求的参数
            Map<String, String> parameters = new HashMap<>();
            parameters.put("param1", "value1");
            parameters.put("param2", "value2");

            // 构建表格参数
            StringBuilder formData = new StringBuilder();
            for (Map.Entry<String, String> entry : parameters.entrySet()) {
                if (formData.length() != 0) {
                    formData.append("&");
                }
                formData.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
                formData.append("=");
                formData.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
            }

            // 将表格参数写入请求的输出流中
            DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.writeBytes(formData.toString());
            outputStream.flush();
            outputStream.close();

            // 获取响应码
            int responseCode = connection.getResponseCode();

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            // TODO: 处理响应内容

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

在上述代码中,我们使用一个 Map 对象来存储参数。然后,我们使用 StringBuilder 构建表格参数,并将其写入请求的输出流中。需要注意的是,在编写表格参数时,我们应该对键和值进行 URL 编码,以确保它们不包含任何非法字符。

示例:请求天气 API

作为一个具体的例子,我们可以使用上述的方法来请求一个天气 API,并将城市作为参数传递给 API。下面是一个示例代码:

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

public class WeatherAPIExample {

    public static void main(String[] args) {
        try