Java LittleProxy(在Netty之上):如何访问POST Body数据?

时间:2016-06-30 17:57:38

标签: java netty little-proxy

我按照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只有这两个标题在这里相关。这是一个POST请求,有内容......

POST http://www.... HTTP/1.1
Content-Length: 522

在研究Netty API文档时,HttpPostRequestDecoder似乎很有希望,但我得到了NotEnoughDataDecoderException。在Netty JavaDoc这是写的,但我不知道如何提供数据?

  

此getMethod返回body中所有HttpDatas的List。   如果是chunked,则必须使用offer()getMethod提供所有块。如果没有,将引发NotEnoughDataDecoderException。

事实上,我也不确定这是否是在代理中获取POST数据的正确方法。

1 个答案:

答案 0 :(得分:1)

尝试在HttpFiltersSourceAdapter中将此添加到aviod 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);
}