使用 Java 11+ HttpClient 和 Apache HttpClient 设置HTTP请求参数的方法

使用 Java 11+ HttpClient 设置请求参数

从Java 11开始,Java自带的HttpClient可以方便地发送HTTP请求。以下是如何设置GET和POST请求参数的示例:

GET 请求

对于GET请求,参数通常通过URL拼接的方式传递:

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Java11HttpClientExample {
    public static void main(String[] args) {
        String baseUrl = "https://api.example.com/data";
        String param1 = "value1";
        String param2 = "value2";

        // 构建带参数的URL
        String fullUrl = baseUrl + "?param1=" + param1 + "&param2=" + param2;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(fullUrl))
                .GET()
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println("Response: " + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

POST 请求

对于POST请求,参数可以通过请求体传递:

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Java11HttpClientPostExample {
    public static void main(String[] args) {
        String url = "https://api.example.com/data";
        String jsonBody = "{\"param1\":\"value1\", \"param2\":\"value2\"}";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println("Response: " + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用 Apache HttpClient 设置请求参数

Apache HttpClient 是一个功能强大的第三方库,可以用来发送HTTP请求。以下是如何设置GET和POST请求参数的示例:

GET 请求

对于GET请求,可以使用URIBuilder来构建带参数的URL:

java 复制代码
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.net.URI;

public class ApacheHttpClientExample {
    public static void main(String[] args) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            URI uri = new URIBuilder()
                    .setScheme("http")
                    .setHost("example.com")
                    .setPath("/api/data")
                    .setParameter("param1", "value1")
                    .setParameter("param2", "value2")
                    .build();

            HttpGet httpGet = new HttpGet(uri);
            httpGet.setHeader("Content-Type", "application/json");

            httpClient.execute(httpGet);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

POST 请求

对于POST请求,可以通过HttpPostStringEntity来设置请求体:

java 复制代码
import org.apache.http.client.methods.CloseableHttpResponse;
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.HttpClients;
import org.apache.http.util.EntityUtils;

public class ApacheHttpClientPostExample {
    public static void main(String[] args) {
        String url = "https://api.example.com/data";
        String jsonBody = "{\"param1\":\"value1\", \"param2\":\"value2\"}";

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Content-Type", "application/json");

            StringEntity entity = new StringEntity(jsonBody, "UTF-8");
            httpPost.setEntity(entity);

            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                System.out.println("Response: " + responseBody);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  1. 参数编码 :在设置请求参数时,确保对参数值进行适当的编码,以避免特殊字符导致的问题。可以使用java.net.URLEncoder来对参数值进行编码。

  2. 请求头设置 :根据目标API的要求,设置适当的请求头,例如User-AgentContent-Type等。

  3. 错误处理:在发送请求时,添加适当的错误处理逻辑,以确保程序的健壮性。

通过上述示例代码,你可以使用 Java 11+ HttpClientApache HttpClient 设置HTTP请求参数。无论是GET请求还是POST请求,都可以通过构建适当的请求对象来实现。希望这些示例能帮助你在开发中更好地设置HTTP请求参数。

相关推荐
mldong5 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾16 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe6876 小时前
es的密码带有特殊字符,导出
java
pnoker6 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy6 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科7 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
骇客野人7 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng18 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
uoKent8 小时前
计网中的HTTP/HTTPS
网络协议·http·https
wxwx_bscxy3228 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite