You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用News API发起GET请求报userAgentMissing错误如何解决

问题原因

News API 服务端强制校验所有入站请求的User-Agent请求头,未携带该头的匿名请求会直接被拦截,返回HTTP 400状态码和userAgentMissing错误。Node.js 原生https模块默认不会自动填充User-Agent头,不管你调用https.get还是https.request方法,只要没手动配置该请求头,都会触发相同报错,和你用哪个原生请求方法无关。

修复方案

只需要在发起请求时,手动在请求配置里添加合法的User-Agent头即可,无需替换第三方请求库,原生模块即可正常调用。
修正后的可运行代码如下:

app.get("/", function (req, res) {
  const targetUrl = "https://newsapi.org/v2/top-headlines?country=in&apiKey=xxxxx";
  // 构造请求配置
  const requestOptions = new URL(targetUrl);
  requestOptions.headers = {
    // User-Agent值自定义即可,标注你的应用名称/版本,不要留空
    'User-Agent': 'MyNewsClient/1.0'
  };

  https.get(requestOptions, function (response) {
    console.log("接口响应状态码:", response.statusCode);
    let responseData = '';
    // 流式接收响应分片,拼接完成后再解析
    response.on('data', (chunk) => {
      responseData += chunk;
    });
    response.on('end', () => {
      const parsedData = JSON.parse(responseData);
      console.log("接口返回内容:", parsedData);
      res.send(parsedData);
    });
  }).on('error', (err) => {
    console.error("请求News API失败:", err);
    res.status(500).send("服务拉取新闻失败");
  });
});
额外排查点
  • User-Agent字段值不要留空,也不要用过于模糊的默认标识,明确标注你的应用信息即可,服务端对值的具体格式没有强制要求。
  • 你原有代码存在隐藏bug:data事件是分片触发的,接口返回内容体积较大时会分多次推送数据片段,直接对单次接收的chunk做JSON.parse会触发解析错误,必须等所有分片接收完成(监听end事件)、拼接出完整响应字符串后再做JSON解析。
  • 如果添加头之后依然报错,先打印实际发出的请求头校验:在https.get的回调里执行console.log(response.req.getHeader('user-agent')),确认UA值确实被带上,排查是否有本地代理、网关层把出站请求的UA头剔除了。

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:48:27