cURL请求正常但axios.get返回403的问题排查求助
解决Axios请求返回403但curl可正常获取数据的问题
这种情况大概率是目标服务器对请求头做了校验,Axios默认的请求头不符合服务器要求,而curl的默认请求头通过了校验。可以按以下步骤排查解决:
对比请求头差异
执行curl -v https://maps.amtrak.com/services/MapDataService/trains/getTrainsData,查看输出中>开头的请求头内容,重点关注User-Agent、Accept这两个字段。Axios默认的User-Agent是axios/[版本号],和curl的默认值不同,很多服务器会通过这个字段拦截非标准工具的请求。修改Axios请求头匹配curl
在Axios的请求配置中添加和curl一致的关键请求头,修改后的代码如下:const axios = require("axios"); const dataUrl = "https://maps.amtrak.com/services/MapDataService/trains/getTrainsData"; console.log("getting"); axios.get(dataUrl, { headers: { 'User-Agent': 'curl/7.81.0', // 替换成你curl实际输出的User-Agent值 'Accept': '*/*' } }) .then(response => console.log(response.data)) .catch(err => console.log(err.response?.status, err.response?.data || err.message));其他排查方向
如果添加上述头后仍报错,可以检查是否需要设置Referer字段(部分服务器会校验请求来源),或者是否存在Cookie校验(但此案例中直接用curl请求无需Cookie,所以概率较低)。
内容的提问来源于stack exchange,提问作者Mark C.
相关产品推荐
相关产品推荐

