六、HTTP协议拦截器

HTTP协议拦截器是一个实现了HTTP协议特定方面的程序。通常协议拦截器将作用于报文的一个特定的首部或一组相关的首部。或者添加一个特定的首部或一组相关的首部到将要发送的报文中。协议拦截器也可以操作报文内含的实体--显而易见的内容解压/压缩就是一个好的例子。包装实体类使用了装饰模式对原始的实体进行装饰。几个协议拦截器能够结合构成一个逻辑单元。

协议拦截器能够通过共享信息来合作--比如处理状态--通过HTTP上下文。协议拦截器使用HTTP上下文为一次请求或几个关联请求储存一个处理状态。

几个拦截器中被执行的顺序不依靠一个特别的执行上下文状态。如果这些拦截器具有相具有依赖关系,就必须以一个特定的顺序执行。比如希望他们以某个顺序执行,就必须以相同的序列加到协议进程中。

协议拦截器必须被实现为线程安全的。类似于servlet,协议拦截器将不会使用多个实例变量,除非访问的这些变量是同步的。

下面的例子说明了本地上下文在连续请求中保留处理状态的用法。 

CloseableHttpClient httpclient = HttpClients.custom().addInterceptorLast(new HttpRequestInterceptor(){
    public void process(final HttpRequest request,final HttpContext context)throws Exception{
        AtomicInteger count = (AtomicInteger)context.getAttribute("count");
        request.addHeader("Count",Integer.toString(count.getAndIncrement()));
    }
}).buld();

AtomicInteger count = new AtomicInteger(1);
HttpClientContext localContext = HttpClientConext.create();
localContext.setAttribute("count",count);

HttpGet httpGet = new HttpGet("http://www.baidu.com");
for(int i=0;i<10;i++){
    CloseableHttpResponse response = httpclient.execute(httpGet,localContext);
    try{
        HttpEntity entity = response.getEntity();
    }finally{
        response.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值