问题描述
对接三方接口接口,鉴权方式为Basic Auth,即在Header中加Authorization:Basic ${signature}。
- Postman请求结果:
- Java代码使用OkHttp客户端调用返回:400 Bad Request
- 问题提交给接口提供方,得到反馈接口正常
目测是ApiPost工具调用结果.
问题解决过程
经检查,接口路径,鉴权参数都没有任何问题。
代码debug调试时Authorization请求头也确实添加了。但是接口提供方日志显示缺少Header: Authorization。
通过debug跟踪okhttp源码发现这样一段代码:
在重定向时,OkHttp会移除header: Authorization!!!
那么,提供方服务为什么要重定向一次?
答案是 nginx 自动把http请求转为https
问题找到,解决办法是把http请求改为https即可。
所以这是一个接口提供方提供接口路径不完全正确 + OkHttp触发的问题。
ps:我自己也下载ApiPost试了一下,发现可以成功。所以合理猜测Postman做了与OkHttp类似的处理而ApiPost没有。在重定向时,移除Authorization估计是处于安全考虑。