首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分块HTTP请求(LittleProxy)的网络访问内容

分块HTTP请求(LittleProxy)的网络访问内容
EN

Stack Overflow用户
提问于 2013-03-25 16:53:44
回答 2查看 1.6K关注 0票数 1

我正在用LittleProxy截取一个HTTP请求,它使用Netty。但是,现在我想截取一个显然使用分块传输编码的webservice请求。

HTTP标头如下所示

代码语言:javascript
复制
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

如何访问内容?我试着在小代理代码中将httpChunkAggregator添加到一些管道中,但是没有用。

EN

回答 2

Stack Overflow用户

发布于 2015-12-18 10:15:22

您需要在HttpFiltersSourceAdapter中覆盖这两个方法。返回一个非零的缓冲区大小。LittleProxy将自动聚合httpRequest和httpContent,并封装到一个AggregatedFullHttpRequest中,这允许转换为httpContent。

代码语言:javascript
复制
@Override
public int getMaximumRequestBufferSizeInBytes() {
    return 1024 * 1024;
}

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

然后,您可以克隆并读取HTTP包中的内容:

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2013-08-21 05:40:13

您可以使用HttpRequestFilter,如下所示:

代码语言:javascript
复制
    final HttpProxyServer plain = 
        new DefaultHttpProxyServer(8888, new HttpRequestFilter() {
            @Override
            public void filter(HttpRequest httpRequest) {
                System.out.println("Request went through proxy: "+httpRequest);
            }
        },
        new HttpResponseFilters() {
            public HttpFilter getFilter(String hostAndPort) {
                return null;
            }
        });

这是LittleProxy 0.5.3的版本。GitHub master更新为使用NetTY4,语义将略有不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15610862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档