HttpClient5中如何从HttpResponse获取请求头?4.x方法失效后的方案确认
Apache HttpComponents 5.x 获取响应头的方法
首先,你提到的将HttpResponse转为CloseableHttpResponse后调用getHeaders()的方案是可行的,但其实不需要强制类型转换——因为HttpResponse接口本身继承了HttpMessage,而HttpMessage提供了多种获取头信息的方法,直接调用即可。
以下是几种在HttpClient 5.x中获取响应头的常用方式:
1. 获取指定名称的头信息
- 获取单个头:
Header getHeader(String name)Header contentTypeHeader = response.getHeader("Content-Type"); - 获取同名称的所有头(返回数组):
Header[] getHeaders(String name)Header[] setCookieHeaders = response.getHeaders("Set-Cookie");
2. 遍历所有响应头
如果需要获取全部头信息,可以使用headerIterator()方法拿到迭代器,再遍历收集:
Iterator<Header> headerIterator = response.headerIterator(); while (headerIterator.hasNext()) { Header header = headerIterator.next(); // 处理每个头,比如打印名称和值 System.out.println(header.getName() + ": " + header.getValue()); }
如果需要将所有头转为数组,可以手动收集:
List<Header> allHeaders = new ArrayList<>(); Iterator<Header> iterator = response.headerIterator(); while (iterator.hasNext()) { allHeaders.add(iterator.next()); } Header[] headerArray = allHeaders.toArray(new Header[0]);
3. 关于CloseableHttpResponse的说明
CloseableHttpResponse只是HttpResponse的一个实现类(用于支持资源自动关闭),它并没有额外新增获取头的方法——你调用的getHeaders()其实还是来自HttpMessage接口的定义。所以只要你拿到的HttpResponse实例是有效的(比如从客户端执行请求返回的),直接调用上述方法即可,无需强制转换。
内容的提问来源于stack exchange,提问作者CN Dioxide
相关产品推荐
相关产品推荐

