2016-06-30 4 views
1

私はGitHub:LittleProxyと表示された簡単な例に続き、clientToProxyRequest(HttpObject httpObject)の方法に以下を追加しました。Java LittleProxy(Nettyの上にある):POST Bodyデータにアクセスするには?

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では、これら2つのヘッダーのみがここで関連します。これは、POSTリクエストだとコンテンツがあります...ネッティーAPIドキュメントへHttpPostRequestDecoderを探し

POST http://www.... HTTP/1.1 
Content-Length: 522 

は有望であると思われるが、私はNotEnoughDataDecoderExceptionを取得します。 Netty JavaDocに書かれていますが、データの提供方法はわかりません。

このgetMethodは、bodyからすべてのHttpDatasのリストを返します。 チャンクされている場合は、すべてのチャンクがoffer()getMethodを使用して提供されている必要があります。そうでない場合、NotEnoughDataDecoderExceptionが発生します。

実際、これがプロキシのPOSTデータを取得する正しい方法であるかどうかは確かです。

答えて

0

NotEnoughDataDecoderExceptionをaviodためにあなたのHttpFiltersSourceAdapterでこれを追加しよう:

@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); 
} 
関連する問題