2

我遵循了GitHub:LittleProxy中显示的简单示例,并在 Method.xml 中添加了以下内容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 从正文返回所有 HttpDatas 的列表。如果分块,则必须使用 offer() getMethod 提供所有块。如果没有,将引发 NotEnoughDataDecoderException。

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

4

1 回答 1

2

尝试将其添加到您HttpFiltersSourceAdapter的 aviod中NotEnoughDataDecoderException

@Override
public int getMaximumRequestBufferSizeInBytes() {
    return 1048576; 
}

1048576这是聚合内容的最大长度。请参阅使用 Apache HttpClient 将数据发布到 netty

这将启用内容的解压缩和聚合,请参见以下源代码org.littleshoot.proxy.impl.ClientToProxyConnection

// Enable aggregation for filtering if necessary
int numberOfBytesToBuffer = proxyServer.getFiltersSource()
            .getMaximumRequestBufferSizeInBytes();
if (numberOfBytesToBuffer > 0) {
    aggregateContentForFiltering(pipeline, numberOfBytesToBuffer);
}
于 2017-05-22T09:02:04.933 回答