I am trying to get Apache HttpClient to fire an HTTP request, and then display the HTTP response code (200, 404, 500, etc.) as well as the HTTP response body (text string). It is important to note that I am using v4.2.2
because most HttpClient examples out there are from v.3.x.x
and the API changed greatly from version 3 to version 4.
Unfortunately I've only been able to get HttpClient returning the status code or the response body (but not both).
Here's what I have:
// Getting the status code.
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://whatever.blah.com");
HttpResponse resp = client.execute(httpGet);
int statusCode = resp.getStatusLine().getStatusCode();
// Getting the response body.
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://whatever.blah.com");
ResponseHandler<String> handler = new BasicResponseHandler();
String body = client.execute(httpGet, handler);
So I ask: Using the v4.2.2
library, how can I obtain both status code and response body from the same client.execute(...)
call? Thanks in advance!
This question is related to
java
http
apache-httpclient-4.x
http-status-code-415
Fluent facade API:
Response response = Request.Get(uri)
.connectTimeout(MILLIS_ONE_SECOND)
.socketTimeout(MILLIS_ONE_SECOND)
.execute();
HttpResponse httpResponse = response.returnResponse();
StatusLine statusLine = httpResponse.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
// ??????????(???????)
String responseContent = EntityUtils.toString(
httpResponse.getEntity(), StandardCharsets.UTF_8.name());
}
You can avoid the BasicResponseHandler, but use the HttpResponse itself to get both status and response as a String.
HttpResponse response = httpClient.execute(get);
// Getting the status code.
int statusCode = response.getStatusLine().getStatusCode();
// Getting the response body.
String responseBody = EntityUtils.toString(response.getEntity());
BasicResponseHandler throws if the status is not 2xx. See its javadoc.
Here is how I would do it:
HttpResponse response = client.execute( get );
int code = response.getStatusLine().getStatusCode();
InputStream body = response.getEntity().getContent();
// Read the body stream
Or you can also write a ResponseHandler starting from BasicResponseHandler source that don't throw when the status is not 2xx.
If you are using Spring
return new ResponseEntity<String>("your response", HttpStatus.ACCEPTED);
Source: Stackoverflow.com