使用Okhttp调用API返回Forbidden错误,请求格式正确是什么原因?
问题排查方案
403 Forbidden 错误是服务端主动拒绝了你的请求,和你提交的JSON格式是否正确没有直接关联,按照以下顺序排查即可:
- 补充必要请求头
你的代码中构造Request时没有添加任何请求头,绝大多数后端接口都会要求携带Content-Type声明请求体格式,需要身份校验的接口还要求携带鉴权头,修改Request构造逻辑:Request request = new Request.Builder() .url(SendTeam) // 添加JSON格式声明头 .addHeader("Content-Type", "application/json; charset=utf-8") // 如果接口需要身份校验,补充下方鉴权头,值替换为你实际的授权凭证 // .addHeader("Authorization", "Bearer 你的接口令牌") .post(body) .build(); - 校验请求基础配置
确认SendTeam变量存储的接口地址和文档要求完全一致,确认接口要求的请求方法是POST,若使用的是HTTP接口,需要在安卓项目中添加网络安全配置放行明文请求,安卓9及以上版本默认禁止HTTP请求。 - 校验请求体内容
打日志确认String.valueOf(object)输出的是合法JSON字符串,若object是普通Java对象没有重写toString方法,这里会输出类名@内存地址格式的无效内容,导致请求异常。 - 交叉验证接口可用性
用Postman等工具传入相同的请求参数、请求头调用接口,若能正常返回,把Postman中所有的请求头都平移到你的OkHttp请求中即可;如果Postman调用也报403,排查接口是否有IP限制、请求频次限制,或者你的账号权限不足。
内容的提问来源于stack exchange,提问作者Sudhit Chauhan
相关产品推荐
相关产品推荐

