java-如何获取HttpClient返回状态码和响应正文?
我正在尝试让Apache HttpClient触发HTTP请求,然后显示HTTP响应代码(200、404、500等)以及HTTP响应正文(文本字符串)。 需要注意的是,我正在使用v4.2.2,因为那里的大多数HttpClient示例都来自client.execute(...),并且API从版本3到版本4有了很大变化。
不幸的是,我只能使HttpClient返回状态代码或响应正文(但不能同时返回两者)。
这是我所拥有的:
// 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 handler = new BasicResponseHandler();
String body = client.execute(httpGet, handler);
因此,我问:使用v4.2.2库,如何从同一client.execute(...)调用中获取状态代码和响应正文? 提前致谢!
5个解决方案
49 votes
不要向HttpResponse提供处理程序。
获取HttpResponse对象,使用处理程序获取主体并直接从中获取状态代码
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Aviram Segal answered 2020-07-04T15:01:28Z
30 votes
您可以避免使用BasicResponseHandler,但可以使用HttpResponse本身以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());
lkamal answered 2020-07-04T15:01:48Z
13 votes
如果状态不是2xx,则BasicResponseHandler引发。 参见其javadoc。
这是我的方法:
HttpResponse response = client.execute( get );
int code = response.getStatusLine().getStatusCode();
InputStream body = response.getEntity().getContent();
// Read the body stream
或者,您也可以编写一个从BasicResponseHandler源开始的ResponseHandler,当状态不是2xx时不会抛出该响应。
eskatos answered 2020-07-04T15:02:17Z
4 votes
流利的外观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());
}
Edward Lee answered 2020-07-04T15:02:36Z
0 votes
如果您使用的是Spring
return new ResponseEntity("your response", HttpStatus.ACCEPTED);
vsingh answered 2020-07-04T15:02:57Z