Dear Wiki user, You have subscribed to a wiki page or wiki category on "Httpcomponents Wiki" for change notification.
The following page has been changed by OlegKalnichevski: http://wiki.apache.org/HttpComponents/HttpClientTutorial ------------------------------------------------------------------------------ == HTTP protocol interceptors == - HTTP protocol customization using custom protocol interceptors + HTTP protocol interceptor is a routine that implements a specific aspect of the HTTP protocol. Usually protocol interceptors are expected to act upon one specific header or a group of related headers of the incoming message or populate the outgoing message with one specific header or a group of related headers. Protocol interceptors can also manipulate content entities enclosed with messages, transparent content compression / decompression being a good example. Usually this is accomplished by using the 'Decorator' pattern where a wrapper entity class is used to decorate the original entity. Several protocol interceptors can be combined to form one logical unit. + + Protocol interceptors can collaborate by sharing information - such as a processing state - through the HTTP execution context. Protocol interceptors can use HTTP context to store a processing state for one request or several consecutive requests. + + Usually the order in which interceptors are executed should not matter as long as they do not depend on a particular state of the execution context. If protocol interceptors have interdependencies and therefore must be executed in a particular order, they should be added to the protocol processor in the same sequence as their expected execution order. + + Protocol interceptors must be implemented as thread-safe. Similarly to servlets, protocol interceptors should not use instance variables unless access to those variables is synchronized. + + This is an example of how local context can be used to persist a processing state between consecutive requests: + + {{{ + DefaultHttpClient httpclient = new DefaultHttpClient(); + + HttpContext localContext = new BasicHttpContext(); + + AtomicInteger count = new AtomicInteger(1); + + localContext.setAttribute("count", count); + + httpclient.addRequestInterceptor(new HttpRequestInterceptor() { + + public void process( + final HttpRequest request, + final HttpContext context) throws HttpException, IOException { + AtomicInteger count = (AtomicInteger) context.getAttribute("count"); + request.addHeader("Count", Integer.toString(count.getAndIncrement())); + } + + }); + + HttpGet httpget = new HttpGet("http://localhost/"); + for (int i = 0; i < 10; i++) { + HttpResponse response = httpclient.execute(httpget, localContext); + + HttpEntity entity = response.getEntity(); + if (entity != null) { + entity.consumeContent(); + } + } + }}} == HTTP parameters == --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
