Android 400 bad request错误(Okhttp3大坑 )

Stars-one 2021年05月25日 204次浏览 本篇字数为1,029字

本文为作者原创,转载请注明出处,谢谢配合
作者:Stars-one
链接:https://stars-one.site/2021/05/25/okhttp3-bad-request


公司的一个项目,需要与后台开发人员对接,比较奇葩的是,测试环境没有使用token,而正式环境需要传token,然后,测试环境通了,正式环境加了token就报错了..

排查过程

首先,排查是否由于网络的原因,后台开发人员测试没问题,我这边用postman测试也是没有问题,但是APP却无法调用,猜测代码可能出现问题

之后进一步,排除是否是参数问题(传请求头是否传错),确认无误之后,才代码看起

参考着网上的资料,调整代码并测试,本来没有头绪的,忽然感觉是不是method这个方法不能用,于是便果断地改成了post方法,没想到就可以了..

解决方法

搜集资料和排查了一两个钟头,终于是发现了问题的关键,自己代码用错了

如果是请求头传参,构造Request不能使用下面这种方式

错误方式:

RequestBody body = new RequestBody.create(MediaType.parse("application/json"),json)
Request request = new Request.Builder()
    .addHeader("Authorization", "Basic " + token)
	.url(fullUrl)
	.method("post", body) //注意这里,如果需要传请求头,不要用这种方式
	.build();

正确方式:

RequestBody body = new RequestBody.create(MediaType.parse("application/json"),json)
Request request = new Request.Builder()
    .addHeader("Authorization", "Basic " + token)
	.url(fullUrl)
	.post(body)
	.build();

参考

相关标签