Il 28/01/2013 17:01, Oleg Kalnichevski ha scritto: > 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: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> >> >> 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: [email protected] > For additional commands, e-mail: [email protected] >
Yes, the device is not under my control, so i'll use the code you posted. Thank you, you've been very helpful Franco
