当前位置: 首页 > 网络应用技术

OpenFeign Online在线乱码代码问题和解决方案

时间:2023-03-06 00:38:47 网络应用技术

  两天前,开发同学发现,在线服务向第三部分API发出的请求(此请求已包装在OpenFeegn中),并且有时将其响应弄乱

  后来,经过测试后,它能够复制问题。开发专业的学生发现,只要请求的请求“接受”,并且该值是“ GZIP,DEFLATE,BR”,则必须将响应响应的数据弄乱。

  通过这种现象,我们得出结论,将压缩徽标添加到请求标题中,并且数据对其进行了响应,但没有解压缩。

  知道原因后,只有两个解决方案:

  第一个想法的解决方案不被压缩。无论谁在之前添加了标题参数以之前的开放范围,我们只需要重置“接受输入”。通过方式,介绍了此参数详细信息:

  接受编码和内容编码是一对标题,可以将使用文本传输文本传输文本的文本相关联。工作原理如下:

  压缩类型:

  因此,我们的接下来的两种方法基于设置“身份:引用自身(无压缩和修改)”,告诉请求不被压缩,自然无需解压缩。

  httpclient

  在原始的假装配置下,HTTPClient仍然使用HTTPCLIENT作为HTTP代理,而不是OKHTTP

  只需在邮图的方法上添加一个新标头即可。以前是这样声明的方法:

  或者,您也可以使用@PostMapping的原始方法和方法打开接口上的注释。

  OKHTTP

  在我的测试中,如果客户端代理使用OKHTTP,则将报告一个错误。主要信息是

  报告的原因是回复的内容是空的,也就是说,内容大小为0。

  原因是请求是错误的,而我本地请求的主机实际上已成为“ Localhost:8080”。显然,另一方的接口的主机应为:“ poll.kuaidi100.com”。只有在使用okhttp时才能使用这种现象。我想通过请求客户端的主机,而OKHTTP不会计算最终目标的主机。

  解决方案也很简单。它基于上述解决方案以添加附加的标头。最后,它是:

  摘要:通过使用HTTPCLIENT或OKHTTP,您可以通过添加标头解决乱码代码的问题。但是OKHTTP更为特别,可以添加附加主机。

  第二个想法是添加压缩。根据官方的春季文档,HTTPCLIENT可以直接配置响应的解压缩(假装已实现)。配置方法也很简单。如下图所示::

  应该注意的是,它也写在文档中。它不支持OKHTTP,这意味着如果我们使用OKHTTP代理不这样做。

  因此,问题是,如果您使用OKHTTP,该怎么办,这也是一种方法,但相对较麻烦。目前,我想手动实施解码器,例如:

  根据官方文档的描述,相对容易设置。

  此外,下面的网络提供了实用的操作:https://stackoverflow.com/questions/519013333/okhttp-3-how-decompress-gzip-response-response-useponse-using-java-adroidnew okhttpclient,然后设置interpecteror

  基于上面的网络,我提供了自己的代码实施:

  首先,生成客户并加入您的拦截器。

  自定义拦截器进行减压数据。

  最后,假装在这里要求它,别忘了添加主机