React Native使用Axios调用Reddit API POST请求返回403错误如何解决
问题核心原因
你遇到的403错误完全是Axios请求的传参写法错误导致的,和Reddit接口权限、令牌有效性无关,具体问题如下:
- Axios POST方法参数顺序错误
Axios.post的合法调用格式为axios.post(请求URL, 请求体数据, 配置对象),其中headers、URL参数等配置都需要放到第三个参数的配置对象中。你现在的写法axios.post(url, Headers, Params, Body)把四个参数按错误顺序传入,导致后端接收到的请求体、头信息完全不符合预期。 - Content-Type与参数格式不匹配
Reddit的subscribe接口要求所有参数以application/x-www-form-urlencoded格式提交,你当前设置的Content-Type: application/json以及将参数拆分为Params、Body两部分的写法,都不符合接口要求。 - 冗余的Promise嵌套
你已经使用了async/await语法,不需要再额外搭配.then回调,属于不必要的混用写法。
修正后的代码
subscribe: async function subscribe(action, sub, modhash) { try { const token = await this.getAccessToken(); console.log('token: ' + token) // 所有接口要求参数统一编码为表单格式 const requestBody = new URLSearchParams({ action: action, sr_name: sub, api_type: 'json', extension: 'json' }) const response = await axios.post( 'https://oauth.reddit.com/api/subscribe', requestBody, { headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/x-www-form-urlencoded', 'X-Modhash': modhash } } ) console.log('sub: ' + JSON.stringify(response.data)); console.log("Subbed to " + sub) } catch (error) { throw 'Could not sub: ' + error } },
使用URLSearchParams编码参数会自动匹配表单格式,和你Postman中发送的请求格式完全一致,即可正常调用接口完成订阅。
内容的提问来源于stack exchange,提问作者Diamonddedo
相关产品推荐
相关产品推荐

