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/HttpCoreTutorial

------------------------------------------------------------------------------
  }
  }}}
  
+ === HTTP message parsers and formatters ===
+ 
+ !HttpCore also provides a coarse-grained facade type of interfaces for 
parsing and formatting of HTTP messages. Default implementations of those 
interfaces build upon the functionality provided by !SessionInputBuffer / 
!SessionOutputBuffer and !HttpLineParser / !HttpLineFormatter implementations.
+ 
+ Example of HTTP request parsing / writing for blocking HTTP connections:
+ 
+ {{{
+ SessionInputBuffer inbuffer;
+ SessionOutputBuffer outbuffer;
+ 
+ HttpParams params = new BasicHttpParams();
+ 
+ HttpMessageParser requestParser = new HttpRequestParser(
+         inbuffer, 
+         new BasicLineParser(), 
+         new DefaultHttpRequestFactory(),
+         params); 
+ 
+ HttpRequest request = (HttpRequest) requestParser.parse();
+ 
+ HttpMessageWriter requestWriter = new HttpRequestWriter(
+         outbuffer, 
+         new BasicLineFormatter(), 
+         params);
+ 
+ requestWriter.write(request);
+ }}}
+ 
+ Example of HTTP response parsing / writing for blocking HTTP connections:
+ 
+ {{{
+ SessionInputBuffer inbuffer;
+ SessionOutputBuffer outbuffer;
+ 
+ HttpParams params = new BasicHttpParams();
+ 
+ HttpMessageParser responseParser = new HttpResponseParser(
+         inbuffer, 
+         new BasicLineParser(), 
+         new DefaultHttpResponseFactory(),
+         params); 
+ 
+ HttpResponse response = (HttpResponse) responseParser.parse();
+ 
+ HttpMessageWriter responseWriter = new HttpResponseWriter(
+         outbuffer, 
+         new BasicLineFormatter(), 
+         params);
+ 
+ responseWriter.write(response);
+ }}}
+ 
+ Example of HTTP request parsing / writing for non-blocking HTTP connections:
+ 
+ {{{
+ SessionInputBuffer inbuffer;
+ SessionOutputBuffer outbuffer;
+ 
+ HttpParams params = new BasicHttpParams();
+ 
+ NHttpMessageParser requestParser = new HttpRequestParser(
+         inbuffer, 
+         new BasicLineParser(), 
+         new DefaultHttpRequestFactory(),
+         params); 
+ 
+ HttpRequest request = (HttpRequest) requestParser.parse();
+ 
+ NHttpMessageWriter requestWriter = new HttpRequestWriter(
+         outbuffer, 
+         new BasicLineFormatter(), 
+         params);
+ 
+ requestWriter.write(request);
+ }}}
+ 
+ Example of HTTP response parsing / writing for non-blocking HTTP connections:
+ 
+ {{{
+ SessionInputBuffer inbuffer;
+ SessionOutputBuffer outbuffer;
+ 
+ HttpParams params = new BasicHttpParams();
+ 
+ NHttpMessageParser responseParser = new HttpResponseParser(
+         inbuffer, 
+         new BasicLineParser(), 
+         new DefaultHttpResponseFactory(),
+         params); 
+ 
+ HttpResponse response = (HttpResponse) responseParser.parse();
+ 
+ NHttpMessageWriter responseWriter = new HttpResponseWriter(
+         outbuffer, 
+         new BasicLineFormatter(), 
+         params);
+ 
+ responseWriter.write(response);
+ }}}
+ 
  === HTTP header parsing on demand ===
  
- The char array backing the header can be obtained using the optional 
!FormattedHeader interface.
+ The default implementations of !HttpMessageParser and !NHttpMessageParser 
interfaces do not parse HTTP headers immediately. Parsing of header value is 
deferred until its properties are accessed. Those headers that are never used 
by the application will not be parsed at all. The !CharArrayBuffer backing the 
header can be obtained through an optional !FormattedHeader interface.
  
  {{{
  Header h1 = response.getFirstHeader("Content-Type");
@@ -1899, +1999 @@

  }
  }}}
  
+ == Customizing HTTP connections ==
+ 
+ One can customize the way HTTP connections parse and format HTTP messages by 
extending the default implementations and overriding factory methods and 
replacing the default parser or formatter implementations with a custom one. 
+ 
+ For blocking HTTP connections one also can provide custom implementation of 
session input/output buffers
+ 
+ {{{
+ public class MyDefaultHttpClientConnection extends 
DefaultHttpClientConnection {
+ 
+     @Override
+     protected SessionInputBuffer createSessionInputBuffer(
+             final Socket socket, int buffersize,final HttpParams params) 
throws IOException {
+         return new MySocketInputBuffer(socket, buffersize, params);
+     }
+ 
+     @Override
+     protected SessionOutputBuffer createSessionOutputBuffer(
+             final Socket socket, int buffersize, final HttpParams params) 
throws IOException {
+         return new MySocketOutputBuffer(socket, buffersize, params);
+     }
+ 
+     @Override
+     protected HttpMessageWriter createRequestWriter(
+             final SessionOutputBuffer buffer, final HttpParams params) {
+         return new MyHttpRequestWriter(buffer, new BasicLineFormatter(), 
params);
+     }
+ 
+     @Override
+     protected HttpMessageParser createResponseParser(
+             final SessionInputBuffer buffer, final HttpResponseFactory 
responseFactory, final HttpParams params) {
+         return new MyHttpResponseParser(buffer, new BasicLineParser(), 
responseFactory, params);
+     }    
+     
+ };
+ }}}
+ 
+ For non-blocking HTTP connection implementation one can replace the default 
HTTP message parser and formatter implementations. The session input/output 
buffer implementations can be overridden at the I/O reactor level.
+ 
+ {{{
+ class MyDefaultNHttpClientConnection extends DefaultNHttpClientConnection {
+ 
+     public MyDefaultNHttpClientConnection(
+             final IOSession session,
+             final HttpResponseFactory responseFactory,
+             final ByteBufferAllocator allocator,
+             final HttpParams params) {
+         super(session, responseFactory, allocator, params);
+     }
+     
+     @Override
+     protected NHttpMessageWriter createRequestWriter(
+             final SessionOutputBuffer buffer, final HttpParams params) {
+         return new HttpRequestWriter(buffer, new BasicLineFormatter(), 
params);
+     }
+ 
+     @Override
+     protected NHttpMessageParser createResponseParser(
+             final SessionInputBuffer buffer, final HttpResponseFactory 
responseFactory, HttpParams params) {
+         return new HttpResponseParser(buffer, new BasicLineParser(), 
responseFactory, params);
+     }
+     
+ };
+ }}}
+ 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to