java - 从默认http客户端设置的openfeign请求中删除标头
问题描述
我正在调用一个 API,它将某些 HttpHeaders 列入黑名单,包括Content-Length
似乎由 spring-openfeign 下的 HttpClient 预设的。要正确接收 API 响应,我需要删除Content-Length
标头。
已尝试以下解决方法:
- 我尝试使用可用的 Feign 注释将标头设置为 null 或空字符串
@Headers
,@RequestHeaders
- 我实现了一个
RequestInterceptor
创建可用(不可变)标题映射的副本,删除列入黑名单的标题并将映射设置为requestTemplate.headers(newHeaders)
. 但是只能添加新的标头并且不修改可用的标头(似乎真的是不可变的;)) - 我研究了覆盖使用过的 HttpClient 但直到现在才成功。
遇到的错误/问题:
我正在调用的 API 根据其标头架构验证返回 400。
代码:
如果需要任何代码片段,我很乐意提供它们,但对我来说,这个问题似乎与任何代码问题无关,因为我没有遇到任何异常。
提前致谢!!
解决方案
如果存在请求正文,则包含的 Apache Http 客户端feign-httpclient
将始终设置内容长度标头。解决此问题的一种方法是直接配置 Apache 客户端并通过构建器将其提供给 Feign:
这个自定义客户端可以应用 Apache Http Client 拦截器,允许您在请求离开 Feign 之后和 Apache 发送之前修改请求。查看他们的 javadoc以获取更多信息。
public class Example {
public static void main(String[] args) {
HttpClient httpClient = HttpClients.custom.build();
GitHub github = Feign.builder()
.client(new ApacheHttpClient(httpClient))
.target(GitHub.class, "https://api.github.com");
}
}
推荐阅读
- c - 是否可以在没有基于文件描述符的套接字的情况下使用 libcurl?
- c# - 如何从 C++ dll 获取包含 C# 中的向量元组的复杂返回值
- reactjs - 导航到组件时声明为接口的道具不可用
- python - Django 不显示验证错误
- mysql - 如何从 cmd 执行 sql 转储以从旧 xampp 导出数据库
- node.js - EACCES:仅使用 nodemon 拒绝 fs-extra 的权限
- gcc - 如何使用 CMake 在 AIX 上生成 *.so 文件
- angular - 无法绑定到“ngForOf”,因为它不是“li”的已知属性
- javascript - 使用 Javascript 将 H1 标签更改为 H2
- google-kubernetes-engine - 是否可以通过 L4 LB 与 GKE 直接连接 grpc 客户端而不使用 ESP?