我按照 GitHub:LittleProxy 所示的简单示例进行操作并在 clientToProxyRequest(HttpObject httpObject)
方法中添加了以下内容。
public HttpResponse clientToProxyRequest(HttpObject httpObject)
{
if(httpObject instanceof DefaultHttpRequest)
{
DefaultHttpRequest httpRequest = (DefaultHttpRequest)httpObject;
logger.info(httpRequest.getUri());
logger.info(httpRequest.toString());
// How to access the POST Body data?
HttpPostRequestDecoder d = new HttpPostRequestDecoder(httpRequest);
d.getBodyHttpDatas(); //NotEnoughDataDecoderException
}
return null;
}
记录器报告了这一点,IMO 只有这两个 header 与此处相关。这是一个 POST 请求,并且有内容...
POST http://www.... HTTP/1.1
Content-Length: 522
查看 Netty API 文档,HttpPostRequestDecoder
似乎很有前途,但我得到了 NotEnoughDataDecoderException
。在 Netty JavaDoc写的是这样,但不知道如何提供数据?
This getMethod returns a List of all HttpDatas from body. If chunked, all chunks must have been offered using offer() getMethod. If not, NotEnoughDataDecoderException will be raised.
事实上,我也不确定这是否是在代理中获取 POST 数据的正确方法。
最佳答案
尝试将其添加到您的HttpFiltersSourceAdapter
中以避免NotEnoughDataDecoderException
:
@Override
public int getMaximumRequestBufferSizeInBytes() {
return 1048576;
}
1048576
这里是聚合内容的最大长度。请参阅POSTing data to netty with Apache HttpClient .
这将启用内容的解压缩和聚合,请参阅org.littleshoot.proxy.impl.ClientToProxyConnection
中的源代码:
// Enable aggregation for filtering if necessary
int numberOfBytesToBuffer = proxyServer.getFiltersSource()
.getMaximumRequestBufferSizeInBytes();
if (numberOfBytesToBuffer > 0) {
aggregateContentForFiltering(pipeline, numberOfBytesToBuffer);
}
关于Java LittleProxy(在 Netty 之上): How to access the POST Body data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130224/