Node.js发起HTTP请求报错:Parse Error: Invalid header token 求助
解决Node.js请求JSONP接口时的"Parse Error: Invalid header token"问题
你用Node.js的https.request请求目标接口时触发了头部解析错误,但浏览器能正常访问。核心原因是Node.js默认请求头与浏览器差异大,要么被服务器返回异常响应头,要么服务器返回的响应头不符合Node.js的解析规范。
修正后的代码示例
const https = require('https'); const options = { hostname: 'arfrontend.livemeans.com', path: '/contents.jsonp?op=604', headers: { // 模拟浏览器User-Agent,避免服务器拦截或返回异常内容 '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' } }; const req = https.request(options, (res) => { let rawData = ''; // 分段接收响应数据 res.on('data', (chunk) => { rawData += chunk; }); // 数据接收完成后处理JSONP格式 res.on('end', () => { // 剥离JSONP外层的回调函数包裹(假设回调是类似`callback(...)`的格式) const jsonContent = rawData.replace(/^[a-zA-Z0-9_]+\((.*)\)$/, '$1'); try { const result = JSON.parse(jsonContent); console.log('解析后的JSON数据:', result); } catch (err) { console.error('JSON解析失败:', err); } }); }); // 捕获请求过程中的错误,方便排查问题 req.on('error', (err) => { console.error('请求出错:', err); }); req.end();
关键修复点
- 模拟浏览器请求头:服务器常通过
User-Agent识别请求来源,Node.js默认的标识会被判定为非浏览器请求,返回异常内容或响应头。添加标准浏览器的User-Agent即可解决大部分这类问题。 - 处理JSONP格式:接口返回的是JSONP而非纯JSON,必须去掉外层的回调函数包裹,才能用
JSON.parse解析成JSON对象。 - 错误监听:显式监听
error事件,能更直观地看到请求过程中出现的问题,避免未捕获错误导致程序崩溃。
极端情况处理(不推荐)
如果添加请求头后仍出现头部解析错误,大概率是服务器返回的响应头存在不符合HTTP规范的字符。可以临时开启insecureHTTPParser选项允许解析不规范的头,但这会带来安全风险,仅作为临时方案:
const options = { hostname: 'arfrontend.livemeans.com', path: '/contents.jsonp?op=604', headers: { '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' }, insecureHTTPParser: true // 允许解析非标准HTTP头 };
内容的提问来源于stack exchange,提问作者Tiago Camacho
相关产品推荐
相关产品推荐

