我需要验证一些用户请求,所以我正在尝试使用 LittleProxy。这个想法是让它对用户透明(iptables > littleproxy > origin server)。
所以我使用 iptables 将流重定向到 LittleProxy(正在监听 127.0.0.1:3127),如下所示:
iptables -t nat -A OUTPUT -p tcp -o eth0 --dport 80 -j DNAT --to 127.0.0.1:3127
如果我使用 启动它withTransparent(true)
,我会收到错误400 Bad Request to URI。这是由于 RFC 7230 合规性而发生的。
final HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
.withPort(3127).withTransparent(true).start();
所以我尝试按如下方式启动它,并更改请求 URI:
final HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
.withPort(3127).withTransparent(false)
.withFiltersSource(new HttpFiltersSourceAdapterExt()).start();
并重写方法如下:
@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject) {
if (httpObject instanceof DefaultHttpRequest) {
final DefaultHttpRequest request = (DefaultHttpRequest) httpObject;
final String host = request.headers().get(HttpHeaders.Names.HOST);
request.setUri("http://" + host + request.getUri());
}
return null;
}
但是更改 URI 会导致 LittleProxy 无限循环。每次添加一个新的Via头。
我也尝试过使用.withAllowRequestToOriginServer(true)
,但.withTransparent(true)
也会导致无限循环。
学习DirectRequestTest.java
时我发现我可以测试标头并检查它是否已经有“Via”,但我不想中止请求。我仍然希望 LittleProxy 调用源服务器,检索并向用户提供响应。
所以我的问题是,我如何用 LittleProxy 实现这个场景?