java httpclient返回_java-如何获取HttpClient返回状态码和响应正文?

这篇博客讨论了如何在Apache HttpClient v4.2.2中同时获取HTTP响应的状态码和正文。通过避免使用BasicResponseHandler,可以直接从HttpResponse对象中获取状态码,并使用EntityUtils将响应体转换为字符串。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值