Java LittleProxy(在 Netty 之上): How to access the POST Body data?

标签 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 只有这两个 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/

相关文章:

java - java中可以使用list来实现复合模式吗?

java - 如何配置使用Netty的服务器发送UDP数据包的源端口?

java - 如何让我的 netty 处理程序在捕获异常后继续读取数据?

java - 通过littleproxy创建反向代理

java - LittleProxy 同时处理 HTTP 和 HTTPS

java - 为什么从静态初始化程序启动线程并等待其完成会导致死锁?

java - 除了处理之外,Short 和 Character 有什么区别?

java - 如何确定哪个服务器正在监听端口 80

multithreading - 我们是否需要一个以上的老板组线程?