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

JavaScript如何获取持续加载的text/event-stream接口的首次响应内容

解决方案

问题根源是UrlFetchApp.fetch默认需要等待请求完整结束(服务器断开连接或所有内容传输完成)才会返回,而该text/event-stream类型的SSE接口是长连接持续推送模式,服务器不会主动断开连接,因此原代码会一直挂起直到触发Google Apps Script的默认超时阈值。

方案1:配置请求超时+提取首段JSON

通过设置较短的超时时间强制终止请求,同时开启异常静默配置获取已传输的内容,再提取第一份完整JSON即可:

var url = "https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4";
var options = {
  timeout: 10000, // 超时时间设为10秒,可根据实际首次响应速度调整为3-15秒区间
  muteHttpExceptions: true // 忽略超时等异常,强制返回已接收的响应内容
};
var response = UrlFetchApp.fetch(url, options);
var rawContent = response.getContentText();
// 匹配内容开头第一份完整JSON
var firstJsonStr = rawContent.match(/^\{.*?\}/s)[0];
var json = JSON.parse(firstJsonStr);

方案2:更稳妥的JSON提取(可选)

如果响应内容中存在特殊字符可能干扰正则匹配,可以用大括号计数的方式提取首段完整JSON:

var url = "https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4";
var options = {
  timeout: 10000,
  muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(url, options);
var rawContent = response.getContentText();

function extractFirstJson(raw) {
  let bracketCount = 0;
  let endPos = -1;
  for (let i = 0; i < raw.length; i++) {
    if (raw[i] === '{') bracketCount++;
    if (raw[i] === '}') {
      bracketCount--;
      if (bracketCount === 0) {
        endPos = i;
        break;
      }
    }
  }
  return endPos > -1 ? raw.slice(0, endPos + 1) : '';
}

var firstJsonStr = extractFirstJson(rawContent);
var json = JSON.parse(firstJsonStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:03