1

Netty を使用するLittleProxyでHTTP リクエストをインターセプトしています。ただし、チャンク転送エンコーディングを使用していると思われる Web サービス要求をインターセプトしたいと考えています。

HTTPヘッダーは次のようになります

Content-Type -> text/xml; charset=UTF-8
Host -> 192.168.56.1:7897
SOAPAction -> "getSymbols"
Transfer-Encoding -> chunked
User-Agent -> Axis2
Via -> 1.1.tvmbp

どうすればコンテンツにアクセスできますか? littleproxy コードのパイプラインに httpChunkAggregator を追加しようとしましたが、役に立ちませんでした。

4

2 に答える 2

3

HttpFiltersSourceAdapter でこの 2 つのメソッドをオーバーライドする必要があります。ゼロ以外のバッファ サイズを返します。LittleProxy は自動的に httpRequest と httpContent を集約し、AggregatedFullHttpRequest にラップして、httpContent にキャストできるようにします。

@Override
public int getMaximumRequestBufferSizeInBytes() {
    return 1024 * 1024;
}

@Override
public int getMaximumResponseBufferSizeInBytes() {
    return 1024 * 1024 * 2;
}

次に、HTTP パッケージのコンテンツを複製して読み取ることができます。

String cloneAndExtractContent(HttpObject httpObject, Charset charset){
    List<Byte> bytes = new ArrayList<Byte>();
    HttpContent httpContent = (HttpContent) httpObject;
    ByteBuf buf = httpContent.content();
    byte[] buffer = new byte[buf.readableBytes()];
    if(buf.readableBytes() > 0) {
        int readerIndex = buf.readerIndex();
        buf.getBytes(readerIndex, buffer);
    }
    for(byte b : buffer){
        bytes.add(b);
    }
    return new String(Bytes.toArray(bytes), charset);
}


@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject) {
     System.out.println("clientToProxyRequest - to -> "+getRequestUrl());
     System.out.println(cloneAndExtractContent(httpObject, StandardCharsets.UTF_8));

     return null;
}


@Override
public HttpObject serverToProxyResponse(HttpObject httpObject)
{
      System.out.println("serverToProxyResponse <- from - "+getRequestUrl());
      System.out.println(cloneAndExtractContent(httpObject, StandardCharsets.UTF_8));

      return httpObject;
}
于 2015-12-18T02:15:21.843 に答える