You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache HttpComponents 5 如何使用HttpAsyncClient发送POST表单数据

HttpAsyncClient 5.x 发送POST表单数据解决方案

你可以直接借助 HttpClient 内置的表单编码工具类将键值对参数序列化为标准application/x-www-form-urlencoded格式字符串,再绑定到请求体即可,效果完全等同于OkHttp的FormBody。

完整实现代码

import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.apache.hc.core5.net.URLEncodedUtils;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
import org.apache.hc.client5.http.async.methods.SimpleHttpRequests;
import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.core5.concurrent.FutureCallback;

public class AsyncFormPostTest {
    public static void main(String[] args) throws Exception {
        try (CloseableHttpAsyncClient client = HttpAsyncClients.createDefault()) {
            // 启动异步客户端
            client.start();
            
            SimpleHttpRequest httpPost = SimpleHttpRequests.post("http://httpbin.org/post");
            
            // 构造表单参数列表
            List<NameValuePair> formParams = new ArrayList<>();
            formParams.add(new BasicNameValuePair("key1", "value1"));
            formParams.add(new BasicNameValuePair("key2", "value2"));
            // 序列化为url编码格式的表单字符串
            String encodedFormBody = URLEncodedUtils.format(formParams, StandardCharsets.UTF_8);
            // 绑定请求体,自动设置对应Content-Type请求头
            httpPost.setBody(encodedFormBody, ContentType.APPLICATION_FORM_URLENCODED);

            Future<SimpleHttpResponse> future = client.execute(httpPost, new FutureCallback<SimpleHttpResponse>() {
                @Override
                public void completed(SimpleHttpResponse simpleHttpResponse) {
                    System.out.println(simpleHttpResponse.getCode());
                    System.out.println(simpleHttpResponse.getBodyText());
                }

                @Override
                public void failed(Exception e) {
                    e.printStackTrace();
                }

                @Override
                public void cancelled() {
                    System.out.println("请求已取消");
                }
            });
            // 阻塞等待请求完成,避免主线程提前退出
            future.get();
        }
    }
}

关键说明

  • 你之前找到的SimpleHttpRequest::setBody方法完全支持表单数据,只需要传入序列化后的表单字符串以及对应的ContentType.APPLICATION_FORM_URLENCODED类型即可
  • URLEncodedUtils工具类会自动处理参数编码、特殊字符转义、键值对拼接逻辑,不需要手动处理格式
  • 必须调用client.start()启动异步客户端,否则请求不会被执行

内容的提问来源于stack exchange,提问作者Green 绿色

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:27:02