gpt4 book ai didi

java - 从默认 http 客户端设置的 openfeign 请求中删除 header

转载 作者:行者123 更新时间:2023-12-02 00:43:03 28 4
gpt4 key购买 nike

我正在调用一个 API,它将某些 HttpHeaders 列入黑名单,包括 Content-Length ,它似乎是由 spring-openfeign 下的 HttpClient 预设的。为了正确接收 API 响应,我需要删除 Content-Length header 。

已尝试以下解决方法:

  • 我尝试使用可用的 Feign 注释 @Headers@RequestHeaders 将 header 设置为 null 或空字符串
  • 我实现了一个 RequestInterceptor,它创建可用(不可变) header 映射的副本,删除列入黑名单的 header 并将映射设置为 requestTemplate.headers(newHeaders)。但只能添加新的 header ,而不能修改可用的 header (似乎确实是不可变的;))
  • 我研究过重写已使用的 HttpClient,但直到现在才成功。

遇到的错误/问题:

我调用的 API 根据其 header 架构验证返回 400。

代码:

如果需要任何代码片段,我很乐意提供它们,但对我来说,该问题似乎与任何代码问题无关,因为我没有遇到任何异常。

提前致谢!!

最佳答案

如果存在请求正文,feign-httpclient 中包含的 Apache Http 客户端将始终设置内容长度 header 。解决此问题的一种方法是直接配置 Apache 客户端并通过构建器将其提供给 Feign:

此自定义客户端可以应用 Apache Http Client 拦截器,该拦截器允许您在请求离开 Feign 之后、Apache 发送请求之前修改请求。评论their 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");
}
}

关于java - 从默认 http 客户端设置的 openfeign 请求中删除 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com