2017-05-04 137 views
2

我需要驗證一些用戶請求,所以我試圖使用LittleProxy。這個想法是讓它對用戶透明(iptables> littleproxy>原始服務器)。Littleproxy無限循環

所以我使用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對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(); 

而且overrided方法如下:

@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中。每次添加新的通過標題。

我也試過用.withAllowRequestToOriginServer(true)但是.withTransparent(true)也會造成無限循環。

學習DirectRequestTest.java我看到我可以測試標題並檢查它是否已經有「Via」,但我不想中止請求。我仍然希望LittleProxy調用原始服務器,檢索並向用戶提供響應。

所以我的問題是,我怎麼用LittleProxy實現這個場景?

+0

你想出這一個呢還是Bob? –

+0

我認爲你的問題類似於這個問題:https://github.com/adamfisk/LittleProxy/issues/146 –

+0

你可以得到這個工作? –

回答

0

我認爲這是因爲iptables規則。 Littleproxy提出了另一個要求將端口80作爲目標的請求。這些規則將它和sens再次傳遞給littleproxy。你應該把它放在另一臺機器上。