java - sirve - ¿Cómo obtener el código de estado y el cuerpo de respuesta de HttpClient?
modificar jcombobox java (5)
BasicResponseHandler tira si el estado no es 2xx. Ver su javadoc .
Así es como lo haría:
HttpResponse response = client.execute( get );
int code = response.getStatusLine().getStatusCode();
InputStream body = response.getEntity().getContent();
// Read the body stream
O también puede escribir un ResponseHandler comenzando desde la fuente BasicResponseHandler que no se lanza cuando el estado no es 2xx.
Estoy intentando que Apache HttpClient active una solicitud HTTP y luego muestre el código de respuesta HTTP (200, 404, 500, etc.) y el cuerpo de respuesta HTTP (cadena de texto). Es importante tener en cuenta que estoy usando v4.2.2
porque la mayoría de los ejemplos de HttpClient son de v.3.xx
y la API cambió mucho de la versión 3 a la versión 4.
Lamentablemente, solo he podido hacer que HttpClient devuelva el código de estado o el cuerpo de respuesta (pero no ambos).
Esto es lo que tengo:
// 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);
Entonces pregunto: Usando la biblioteca v4.2.2
, ¿cómo puedo obtener el código de estado y el cuerpo de respuesta desde la misma client.execute(...)
? ¡Gracias por adelantado!
Fachada API de fachada:
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());
}
No proporcione el controlador para execute
.
Obtenga el objeto HttpResponse
, use el controlador para obtener el cuerpo y obtenga el código de estado directamente
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Puede evitar BasicResponseHandler, pero use HttpResponse para obtener el estado y la respuesta como 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());
Si estás usando Spring
return new ResponseEntity<String>("your response", HttpStatus.ACCEPTED);