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

使用XMLHttpRequest爬取数据未得预期结果求助

问题排查与修复方案

1. XMLHttpRequest 代码的核心问题

你的第一段代码里重复调用了两次XMLReq.send():

XMLReq.send(JSON.stringify({...})) // 第一次发送带参数的请求
// ...
XMLReq.send(); // 第二次无参数重复发送

这会导致请求被重复触发,且第二次请求没有携带必要的请求体,服务器无法正确处理,直接删掉第二次的XMLReq.send()即可。

2. Fetch 代码的关键错误

你的fetch配置里设置了mode: "no-cors",这会让浏览器返回不透明响应(Opaque Response),这种响应无法读取内容、也不能调用response.json()解析数据,这是你截图里报错的直接原因。

修复后的Fetch代码

去掉mode: "no-cors",同时确保请求体和目标ticker一致(你要获取的是ETIT.tg,之前代码里写的是BRVMAG):

const options = {
  method: 'POST',
  headers: {
    "accept": "*/*",
    "accept-language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7",
    "content-type": "application/json;charset=UTF-8",
    "sec-ch-ua": "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
    "sec-ch-ua-mobile": "?1",
    "sec-ch-ua-platform": "\"Android\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
  },
  referrer: "https://www.sikafinance.com/marches/historiques?s=ETIT.tg",
  referrerPolicy: "strict-origin-when-cross-origin",
  body: JSON.stringify({
    ticker: "ETIT.tg",
    datedeb: "2022-07-20",
    datefin: "2022-08-17",
    xperiod: "0"
  }),
  credentials: "include"
};

fetch('https://www.sikafinance.com/api/general/GetHistos', options)
  .then(response => {
    if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
    return response.json();
  })
  .then(data => {
    // 这里处理返回的数据,生成HTML表格
    generateTable(data);
  })
  .catch(err => console.error(err));

3. 生成HTML表格的示例函数

拿到数据后,可以用下面的函数把返回的历史数据转换成表格:

function generateTable(data) {
  // 假设数据是数组格式,每个元素包含日期、开盘价、收盘价等字段
  const table = document.createElement('table');
  table.border = "1";
  
  // 创建表头
  const headerRow = document.createElement('tr');
  const headers = Object.keys(data[0]);
  headers.forEach(headerText => {
    const th = document.createElement('th');
    th.textContent = headerText;
    headerRow.appendChild(th);
  });
  table.appendChild(headerRow);
  
  // 创建表格内容
  data.forEach(item => {
    const row = document.createElement('tr');
    headers.forEach(header => {
      const td = document.createElement('td');
      td.textContent = item[header];
      row.appendChild(td);
    });
    table.appendChild(row);
  });
  
  // 把表格添加到页面
  document.body.appendChild(table);
}

额外注意事项

  • 确保你的代码是在同域名环境下运行(比如在sikafinance的页面控制台里执行),否则会触发CORS限制;如果是本地页面调用,需要服务器配置CORS允许跨域请求,或者使用代理。
  • 部分网站会校验CSRF Token,如果你请求失败,可以检查浏览器开发者工具里的请求头,看是否有X-CSRF-Token之类的字段,需要添加到请求头中。

内容的提问来源于stack exchange,提问作者Koffi Frederic Sessie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:29