当前位置: 首页 > 面试题库 >

如何获得HttpClient返回状态码和响应正文?

轩辕瑞
2023-03-14
问题内容

我正在尝试让Apache
HttpClient触发HTTP请求,然后显示HTTP响应代码(200、404、500等)以及HTTP响应正文(文本字符串)。重要的是要注意我正在使用,v4.2.2因为那里有大多数HttpClient示例,v.3.x.x并且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<String> handler = new BasicResponseHandler();

String body = client.execute(httpGet, handler);

所以我问: 使用该v4.2.2库,如何从同一client.execute(...)调用中获取状态代码和响应正文?提前致谢!


问题答案:

不要向提供处理程序execute

获取HttpResponse对象,使用处理程序获取主体并直接从中获取状态代码

try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
    final HttpGet httpGet = new HttpGet(GET_URL);

    try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
        StatusLine statusLine = response.getStatusLine();
        System.out.println(statusLine.getStatusCode() + " " + statusLine.getReasonPhrase());
        String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
        System.out.println("Response body: " + responseBody);
    }
}

对于快速的单次调用,流利的API很有用:

Response response = Request.Get(uri)
        .connectTimeout(MILLIS_ONE_SECOND)
        .socketTimeout(MILLIS_ONE_SECOND)
        .execute();
HttpResponse httpResponse = response.returnResponse();
StatusLine statusLine = httpResponse.getStatusLine();

对于Java或httpcomponents的旧版本,代码可能看起来有所不同。



 类似资料:
  • 我试图让ApacheHttpClient触发HTTP请求,然后显示HTTP响应代码(200404500等)以及HTTP响应正文(文本字符串)。需要注意的是,我使用的是因为大多数HttpClient示例都来自和API从版本3到版本4发生了巨大变化。 不幸的是,我只能让HttpClient返回状态代码或响应主体(但不是两者)。 这是我所拥有的: 所以我问:使用库,如何从同一

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?

  • 当我使用MVC控制器时,我使用“返回OK(对象)”或“返回BadRequest(ErrorMessage)”等。 我怎样才能实现这是剃刀页? 我尝试返回新的JSON result(object);这在状态代码为200时有效。但是如果我想返回带有JSON错误消息的状态代码400呢?

  • 我有以下代码: 如果我提供的所有参数都正确-enpoint会像邮递员应用程序一样返回200个http stsatus代码。 但是如果我提供了错误的url-我看到异常: 但是当我以同样的方式在postman中修改url时——我看到404错误: 我想有像邮递员一样的回应和像邮递员一样的回应。 如果我提供而不是,我会得到正确的,我可以在其中提取我想要的数据: 如何编写将提取和的通用代码? 重新模板初始化

  • 在我的烧瓶应用程序中,我想将响应存储在MongoDB中。我想更改状态代码和响应数据,以防存储任务无法完成。如何更改响应对象的状态代码 这是用于Python3.6中开发的Flask应用程序 现在如果有异常,我收到状态代码200