hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: Unable to get HttpStatus.SC_REQUEST_TOO_LONG status successfully
Date Thu, 01 Nov 2012 10:01:18 GMT
On Wed, Oct 31, 2012 at 09:19:19AM -0400, Sachin Nikumbh wrote:
> Hi,
> I am using HttpClient (version 4.2.2) to communicate with a server using
> POST requests. The server can be configured to set request size limit. Once
> the request content exceeds this limit, it sends HTTP 413 response status
> and closes the connection.
> In my simple application written using Apache HttpClient, I send a POST
> request with request content too large for the server using something like
> following:
> ***************************************************
> DefaultHttpClient httpClient = new DefaultHttpClient();
> ...
> ...
> HttpPost postReq = new HttpPost(url);
> ....
> HttpResponse response = httpClient.execute(postReq);
> ***************************************************
> I am expecting the response.getStatusLine().getStatusCode() to
> return  HttpStatus.SC_REQUEST_TOO_LONG. But instead, I am getting a
> SocketException with message :
> ***************************************************
> Connection reset by peer: socket write error
> ***************************************************
> I have used WireShark to see what's being sent and received. Wireshark
> shows the response with 413 status from server the moment client exceeds
> the request size limit. But it looks like HttpClient is ignoring it and
> still continues to send the remaining request.
> Is there something that I am missing or is this not supported?
> Any help will be greatly appreciated,
> Thanks
> Sachin

This problem is caused by the limitation of Java blocking I/O. There is no efficient way of
reading and writing to the same network socket using a single execution thread. Therefore,
HttpClient cannot read incoming data until the entire request is fully written out. Given
that the server sends a 413 status out of sequence and immediately closes the connection while
HttpClient is still busy writing out request data, request execution fails with a connection
reset i/o error rather than HTTP 413 status.

Your only option would be switching to a NIO based HTTP client such Apache HttpAsyncClient
[1] which are better equipped to deal wi8th out of sequence I/O events.


[1] http://hc.apache.org/httpcomponents-asyncclient-dev/index.html

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

View raw message