我正在使用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 一起使用,该客户端似乎会失败。