java - Java 11 : New HTTP client send POST requests with x-www-form-urlencoded parameters

标签 java java-http-client

我正在尝试使用新的http客户端api发送POST请求。
是否有内置的方式来发送格式为x-www-form-urlencoded的参数?

我当前的代码:

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(url))
        .header("Content-Type", "application/x-www-form-urlencoded")
        .POST(BodyPublishers.ofString("a=get_account&account=" + URLEncoder.encode(account, "UTF-8")))
        .build();

我正在寻找一种传递参数的更好方法。像这样:
Params p=new Params();
p.add("a","get_account");
p.add("account",account);

我需要自己构建此功能还是已经内置了某些功能?

我正在使用Java 12。

最佳答案

我认为以下是使用Java 11实现此目标的最佳方法:

Map<String, String> parameters = new HashMap<>();
parameters.put("a", "get_account");
parameters.put("account", account);

String form = parameters.keySet().stream()
        .map(key -> key + "=" + URLEncoder.encode(parameters.get(key), StandardCharsets.UTF_8))
        .collect(Collectors.joining("&"));

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder().uri(URI.create(this.url))
        .headers("Content-Type", "application/x-www-form-urlencoded")
        .POST(BodyPublishers.ofString(form)).build();

HttpResponse<?> response = client.send(request, BodyHandlers.ofString());

System.out.println(response.statusCode() + response.body().toString());

关于java - Java 11 : New HTTP client send POST requests with x-www-form-urlencoded parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728398/

相关文章:

java - Java中多线程计算最小和最大数字

java - 如何在 strings.xml 中设置从 JSON 消耗的变量

java - 如何给java.net.http.HttpClient GET请求添加参数?

java - 如何在 Java8 项目中使用 Http Client API(自 Java 9 起)

java - PhotoView库获取像素颜色

java - HashMap 中的泛型似乎没有被一致使用

Java HttpRequest 超时意外抛出 HttpConnectTimeoutException

java - 在 Java 11 HttpClient 中如何解决受限 header 名称 : Date

java - 我正在尝试通过实现异步任务在 android (java) 中流式传输 chatgpt api 的响应(逐字),但我收到错误

java - 如何开始使用 SAX、DOM、JAXP 和 JDOM