我正在使用selenium和browsermob-proxy,最终由“netty-all”驱动,以访问一个站点(我的控制之外),它提供了巨大的标头作为其身份验证过程的一部分。代理失败并出现netty错误:
io.netty.handler.codec.TooLongFrameException: HTTP header is larger than 16384 bytes., version: HTTP/1.1
我需要从我的browsermob-proxy所依赖的netty-all
jar中删除所有这些限制,可扩展性,性能和内存保护与此用例无关。
克隆了回购后,我改变了:
DEFAULT_MAX_FRAME_SIZE
WebSocket00FrameDecoder
(io.netty.handler.codec.http.websocketx)
HttpObjectDecoder
io.netty.handler.codec.http
到Integer.MAX_VALUE
。
但是,即使使用这些新设置,它仍然会在使用中丢弃“HTTP标头大于16384字节”。
答案 0 :(得分:0)
到了解决方案,它远非优雅,但它的工作原理 - 我的用例效率低下/容错,所以要小心使用。
我不会用Maven恶作剧污染这个答案,因为它们并不严格相关,但请注意netty-all
默认从Maven仓库中提取所有组件。要更改netty-all
内部,您需要生成一个必需组件的jar(在这种情况下为handler.codec.http
),然后更改pom.xml
以拉入修改后的jar。有几种方法可以做到这一点,唯一适用于我的方法是使用mvn install
将jar放在本地.m2 repo中:
mvn install:install-file -Dfile=netty-codec-http-4.1.25.Final-SNAPSHOT.jar -DgroupId=io.netty -DartifactId=netty-codec-http -Dversion=4.1.25.Final-SNAPSHOT -Dpackaging=jar
然后构建netty-all
以获取最终的jar,然后在您自己的项目中使用它而不是原始的。
修改了文件以从http操作中删除大小限制:
除了将各种大小限制设置为Integer.MAX_VALUE之外,我还评论了相关测试,以确保Maven" package"命令成功生成jar。
此处提供git diff
更改:
https://gist.github.com/granite-zero/723fa55ae628494ff9b833dde1973a00
您可以将其作为补丁应用于网络提交04fac00c8c98ed26c5a75887c8e7e53b1e1b68d0