使用Axios发送GraphQL Post请求返回HTML而非JSON的问题求助
GraphQL Axios请求返回登录页HTML的排查方案
可能的原因及解决步骤
1. 请求头缺失关键字段
Postman会自动携带部分默认请求头,Axios若未配置完全,可能触发服务端的身份校验拦截。需确保包含Content-Type(GraphQL请求必须指定为application/json),部分服务还会校验User-Agent字段,模拟客户端请求可绕过拦截。
修正示例代码:
const axios = require('axios'); const ENDPOINT = '你的接口地址'; const TOKEN = '你的令牌'; axios.post(ENDPOINT, { query: `你的GraphQL查询语句` }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${TOKEN}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } }) .then(res => console.log(res.data)) .catch(err => console.error(err.response.data));
2. Cookie会话验证问题
部分服务依赖Cookie维持会话,Postman可能保存了登录后的Cookie,而Axios默认不携带Cookie。开启withCredentials选项可解决:
axios.post(ENDPOINT, { query: `你的GraphQL查询语句` }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${TOKEN}` }, withCredentials: true })
3. Token携带方式不匹配
确认服务端要求的Token位置:是Authorization头,还是自定义头(如x-api-key)?对照Postman的请求头配置,确保Axios的携带方式完全一致。
4. 自动跟随重定向导致拦截
若服务端返回3xx重定向到登录页,Axios默认会自动跟随,最终返回登录页HTML。禁用自动重定向可查看原始响应,排查重定向原因:
axios.post(ENDPOINT, { query: `你的GraphQL查询语句` }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${TOKEN}` }, maxRedirects: 0 })
5. 网络环境差异
Postman与Node.js的网络环境可能不同(如Node.js运行在代理环境下),导致请求被拦截。可尝试禁用代理测试:
axios.post(ENDPOINT, { query: `你的GraphQL查询语句` }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${TOKEN}` }, proxy: false })
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

