Node.js环境下Axios POST请求指定API返回403其他工具正常如何排查
Axios发送x-www-form-urlencoded格式POST请求返回403的解决方法
问题原因
403错误是Node.js环境下Axios构造的请求和curl构造的请求存在差异,触发了目标站点的反爬校验导致的,按以下步骤排查修复即可:
排查步骤
- 先对比两者的完整请求头差异:
- 给curl命令添加
-v参数,执行后打印出完整的请求头、请求体内容 - 给Axios添加请求拦截器,打印实际发出的请求配置,对比两者的差异,把curl里存在但Axios里缺失的头补全
- 给curl命令添加
// 添加请求拦截器打印请求详情 axios.interceptors.request.use(config => { console.log('请求头:', config.headers) console.log('请求体:', config.data) return config })
常见修复方案
1. 补充缺失的校验头
目标站点通常会校验Referer、Accept、Accept-Language等请求头,可在Axios的headers配置中补全,示例:
headers: { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*', 'Referer': 'https://www3.animeflv.net/', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8' }
2. 改用标准的URLSearchParams构造表单数据
直接传字符串容易出现编码问题,改用URLSearchParams构造表单数据,Axios会自动处理编码和Content-Type头:
const axios = require('axios'); (async () => { try { // 构造表单数据 const data = new URLSearchParams(); data.append('value', 'tokyo'); let res = await axios({ method: 'post', baseURL: 'https://www3.animeflv.net', url: '/api/animes/search', data: data, headers: { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)', 'Referer': 'https://www3.animeflv.net/' } }) console.log(`statusCode: ${res.status}`); console.log(res.data.data); } catch (error) { console.error('错误状态码:', error.response?.status); console.error('错误响应内容:', error.response?.data); } })();
3. 移除Axios默认添加的多余请求头
Axios默认会自动添加X-Requested-With: XMLHttpRequest头,部分站点会拦截该头,可在headers中手动设置X-Requested-With: ''移除该头。
快速验证方法
你可以直接将可运行的curl命令转换为Axios代码,直接使用转换后的代码即可正常请求。
内容的提问来源于stack exchange,提问作者Gharned
相关产品推荐
相关产品推荐

