Axios GET请求调用CoWIN接口本地正常 部署Heroku返回403错误
问题原因
1. CoWIN API的IP地域访问限制
该API为印度政府疫苗预约服务的公开接口,官方明确限制仅印度境内IP可访问。你本地环境、Postman、浏览器可正常访问,说明你本地网络使用的是印度IP;而Heroku默认部署节点多位于欧美地区,不在印度IP段内,直接被接口的访问控制策略拦截返回403。
2. 自定义User-Agent未生效
从Heroku返回的错误日志可以看到,请求实际携带的User-Agent值为axios/0.21.1,和你代码中配置的浏览器UA完全不符,说明你的axios请求头配置没有正确传递,即使你本地测试没问题,也可能存在部署时代码未同步、axios版本配置兼容问题、配置结构写法错误的情况。
解决方案
- 先修复UA传递问题:调整axios请求写法,避免配置结构错误导致头信息被覆盖,参考代码如下:
const express = require('express'); const axios = require('axios'); const router = express.Router(); router.get('/getStates', async (req, res) => { try { const response = await axios.get( 'https://cdn-api.co-vin.in/api/v2/admin/location/states', { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36" } } ); res.json({data: response.data.states}); } catch (error) { res.json({ errorMessage: 'There has been an error in getting data. Please try after some time.', error: error }); } }) module.exports = router;
- 解决IP限制问题:
- 创建Heroku应用时选择
ap-south-1(孟买)区域,使用印度节点的IP发起请求 - 自行搭建印度地区的代理服务,通过代理转发API请求
- 申请CoWIN官方开发者授权,使用需要鉴权的非公开接口,规避IP限制
- 创建Heroku应用时选择
Stack Overflow提问优化建议
- 可以补充你本地网络所属地区、Heroku应用部署的节点区域信息,帮助回答者快速定位地域限制问题
- 可以提前指出错误日志中实际请求UA和代码配置UA不一致的特征,缩小排查范围
- 可以补充你项目中使用的axios具体版本号
内容的提问来源于stack exchange,提问作者Sasi Kanth T
相关产品推荐
相关产品推荐

