场景:
请求第三方接口,携带了一些参数,请求头Host也有带,怎么请求都请求不过去,后来查询了很多文档,才知道了啥原因。
如果请求第三方接口,携带了Host参数,都会被过滤掉的,这个Host,System默认是false。也就是说你请求过去的是默认的host,或者根本没有这个参数
如果需要覆盖,在启动类增加System.setProperty("sun.net.http.allowRestrictedHeaders","true");,在启动类上加上这个,改为true,代表覆盖Host
看到网上有人说,直接方法代码里加上就可以了,还是看场景吧,如果你请求的接口本地可以请求通,没有什么网络策略,那你直接启动方法是可以生效的。如果你只能发版上去才能够请求通,那么你必须把这个配置卸载启动类里,因为运行时和编译时的问题System.setProperty();这个方法,运行时是禁止更改的,这是个环境变量,是JRE(runtime)环境。你打包的时候不会去编译这个方法吧,在启动类打包的时候就直接设置了,系统类加载器在启动后只会初始化一次。
在方法代码里设置:
在启动类里设置: