[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpclient-users
Subject:    Re: Proxy org.apache.http.HttpResponse into javax.servlet.http.HttpServletResponse
From:       Dan Checkoway <dcheckoway () gmail ! com>
Date:       2012-02-09 17:33:08
Message-ID: CANK0VvjwcdHVgMv7vP-PAfYj2ivQgFoqaO_HnxD+Ld3Q+dJSQw () mail ! gmail ! com
[Download RAW message or body]


And on an almost completely unrelated note...if you need to copy data from
an InputStream to OutputStream like that, you can do it with a one-liner:
(ok 2 lines if you include the import)  :-)

import org.apache.commons.io.IOUtils;

...  IOUtils.copy(entity.getContent(),
javaxServletHttpHttpServletResponse.getOutputStream());

On Thu, Feb 9, 2012 at 12:06 PM, Warren Bell <warrenbell2@gmail.com> wrote:

> Oleg,
>
> That would explain my chunked data problem. I will exclude all
> hop-by-hop headers from being transfered.
>
> Thanks,
>
> Warren Bell
>
> On 2/9/12 6:11 AM, Oleg Kalnichevski wrote:
> > On Wed, 2012-02-08 at 19:10 -0800, Warren Bell wrote:
> >> I am writing a small proxy servlet and want to know what is the best way
> >> to convert the entity from an org.apache.http.HttpResponse, I am getting
> >> from a destination server through HttpClient, into the
> >> javax.servlet.http.HttpServletResponse outputStream I need in my servlet
> >> to send back to the client's browser. I am currently doing something
> >> like this below, but I am running into issues with chunked data.
> >>
> >> I have already transferred all response headers from
> >> orgApacheHttpHttpResponse to javaxServletHttpHttpServletResponse before
> >> the code below.
> >>
> >> ...
> >>
> >> HttpEntity entity = orgApacheHttpHttpResponse.getEntity();
> >>
> >> InputStream inputStream = null;
> >> try
> >> {
> >>   inputStream = entity.getContent();
> >>   BufferedInputStream bufferedInputStream = new
> >> BufferedInputStream(inputStream);
> >>   OutputStream outputStream =
> >> javaxServletHttpHttpServletResponse.getOutputStream();
> >>   int intNextByte;
> >>   while((intNextByte = bufferedInputStream.read()) != -1)
> >>   {
> >>     outputStream.write(intNextByte);
> >>   }
> >> }
> >> catch(IOException ioex)
> >> {
> >>   ...
> >> }
> >> catch(RuntimeException rex)
> >> {
> >>   ...
> >> }
> >> finally
> >> {
> >>   Close all streams
> >> }
> >>
> >>
> >> The code above does work when I manually exclude the "Transfer-Encoding:
> >> chunked" header from the javax.servlet.http.HttpServletResponse, but am
> >> I suppose to do that ?
> >
> > Yes, you are. There are so called 'hop-by-hop' headers that MAY NOT be
> > transmitted by HTTP proxies to the next hop. See RFC 2616, section
> > 13.5.1: 'End-to-end and Hop-by-hop Headers'.
> >
> > Oleg
> >
> >
> >>  Basically the response that comes back to the
> >> client's browser should be the same as the response that comes back to
> >> HTTPClient in my servlet.
> >>
> >> Also, are there any response headers that I should not transfer over to
> >> javax.servlet.http.HttpServletResponse like maybe Transfer-Encoding ?
> >> Are there headers that get added by the web server after my response has
> >> left the servlet ?
> >>
> >>
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic