在使用java Apache httpcore5框架创建HTTP服务器时,如何检索POST的请求正文



我正在使用Apache httpcore5框架创建一个HTTP服务器。 我正在实施AsyncServerRequestHandler. 我实现的方法是

public void handle(Message<HttpRequest, ?> message, ResponseTrigger responseTrigger, HttpContext httpContext)

不幸的是,如果我打电话给getBody(),我传递message会返回null。 我需要那个正文,因为它包含 POST 的 CGI 参数。

(编辑(:我的 prepare(( 方法看起来像

public AsyncRequestConsumer<Message<HttpRequest, Void>> prepare(HttpRequest request, HttpContext context)
//        throws HttpException
{
return new BasicRequestConsumer<Void>(new NoopEntityConsumer());
} 

对于正在快速阅读本文的人:我是服务器。 我不是在问客户如何执行 POST。 我问服务器如何获得对 POST 正文的访问权限,以便它可以正确响应。 如何获取该邮件正文?

托马斯·凯利的问题让我弄清楚了问题所在。 通过切换到implements AsyncServerRequestHandler<Message<HttpRequest, byte[]>>并将我的prepare()重写为

public AsyncRequestConsumer<Message<HttpRequest, byte[]>> prepare(HttpRequest request, HttpContext context)
{
if (request.getMethod().equals("GET"))
return new BasicRequestConsumer(new NoopEntityConsumer()); // is that one client bananas?
AsyncEntityConsumer<byte[]> dataConsumer = new BasicAsyncEntityConsumer();
return new BasicRequestConsumer<>(dataConsumer);
}

我能够使用message.getBody()访问 POST 请求正文。 if 的 GET 分支是解决嵌入式 HTTP 客户端,如果我将BasicAsyncEntityConsumer与 GET 一起使用,该客户端似乎会失败。

最新更新