On Mon, 2013-01-28 at 16:24 +0100, Zanelli Franco wrote:
> Il 28/01/2013 16:07, Oleg Kalnichevski ha scritto:
> 
> 
>       On Mon, 2013-01-28 at 12:34 +0100, Zanelli Franco wrote:
>       > hi to all,
>       > my device for each http request, returns a response that provides 
> more bytes than specified with Content-Length header. I can know the amount 
> of additional bytes, but I don't know how to tell to httpclient.
>       > Can you please help me?
>       > Should I change the content length strategy implementing a new 
> ContentLengthStratecy class? is it possible?
>       >
>       > thank you
>       > greetings
>       >
>       >
>       
>       
>       I would very strongly to recommend you to not misuse HTTP protocol and
>       do not create HTTP services that grossly violate the specification.
>       Please consider making your code generate properly delineated message
>       and pass whatever additional custom information your particular
>       application requires in a custom header such as 'X-My-Content-Length: 20
>       bytes shorter or whatever'.
>       
>       Oleg
>       
>       PS: yes, it is definitely possible to plug-in a custom
>       ContentLengthStrategy implementation. It is somewhat easier with 4.3
>       APIs and slightly more difficult with 4.2 APIs.
>       
>       
>       ---------------------------------------------------------------------
>       To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
>       For additional commands, e-mail: httpclient-users-h...@hc.apache.org
>       
>       
> 
> 
> Thanks for your fast reply.
> Honestly I didn't understand how to force httpclient to consider my custom 
> content length and not the one specified in device response.
> By the way, can you suggest me where can i find a sample code to change 
> ContentLengthStrategy or resolve my issue, please?
> 
> Thank you very much
> 

So, you are saying you are not in control of how the device generates
response messages? If that is the case, this is how you can work it
around

---
PoolingClientConnectionManager cm = new PoolingClientConnectionManager()
{

    @Override
    protected ClientConnectionOperator
createConnectionOperator(SchemeRegistry schreg) {
        return new DefaultClientConnectionOperator(schreg) {
            @Override
            public OperatedClientConnection createConnection() {
                return new DefaultClientConnection() {
                    @Override
                    protected EntityDeserializer
createEntityDeserializer() {
                        return new EntityDeserializer(new
LaxContentLengthStrategy());
                    }
                };
            }

        };
    }

};
DefaultHttpClient httpclient = new DefaultHttpClient(cm);

HttpGet httpget = new HttpGet("http://www.google.com/";);
HttpResponse response = httpclient.execute(httpget);
EntityUtils.consume(response.getEntity());
---

It is kind of ugly. It will get less cumbersome with 4.3.

Oleg





---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org

Reply via email to