我正在使用Apache httpcore5 framework创建一个HTTP服务器。我正在实现AsyncServerRequestHandler
。我实现的方法是
public void handle(Message<HttpRequest, ?> message, ResponseTrigger responseTrigger, HttpContext httpContext)
不幸的是,如果我打电话给message
,则我通过的null
返回getBody()
。我需要该正文,因为它包含POST的CGI参数。
(edit):我的prepare()方法看起来像
public AsyncRequestConsumer<Message<HttpRequest, Void>> prepare(HttpRequest request, HttpContext context)
// throws HttpException
{
return new BasicRequestConsumer<Void>(new NoopEntityConsumer());
}
对于那些正在快速阅读本文的人:我是服务器。我不是在问客户端如何执行POST。我在问服务器如何获得对POST正文的访问权限,以便它可以正确响应。 我如何获得该邮件正文?
答案 0 :(得分:0)
托马斯·凯利的问题使我想出了问题。通过切换到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一起使用的话,该客户端似乎会失败。