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

Axios请求被CORS拦截但Python HTMLParser爬虫不受影响如何解决?

问题说明

此前使用Python的HTMLParser模块开发的网络爬虫可正常爬取目标站点http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta?ciclop=202120&cup=D&mostrarp=100000&ordenp=2 的数据,现在需要迁移到浏览器端用JavaScript实现同等功能,使用Axios请求原始HTML时持续触发Access to XMLHttpRequest has been blocked by CORS policy错误。

已尝试的请求写法

POST请求

axios.post('http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta', {
  ciclop: '202120',
  cup: 'D',
  mostrarp: 10000,
  ordennp: 2,
})
.then((response) => {
  console.log(response)
})

带crossdomain参数的GET请求

axios.get('http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta?ciclop=202120&cup=D&mostrarp=100000&ordenp=2',
  { crossdomain: true }
)
.then((response) => {
  console.log(response)
})

当前项目为纯前端网页项目,无法使用Node.js生态的Puppeteer等无头浏览器方案,现有实现是通过Flask服务端代理请求后返回HTML给前端处理,希望找到纯前端侧方案降低服务端性能压力。


解决方案

CORS是浏览器原生强制执行的同源安全策略,只要目标站点未配置允许你所在域名的跨域请求规则,纯前端没有任何办法绕过限制直接发起常规HTTP请求获取数据,所有可行的实现方案本质都依赖第三方中转,可选择的适配方案如下:

  • 公共CORS代理:你可以使用公开的CORS代理服务,在你的请求URL前拼接代理服务前缀即可完成请求,注意公共代理的稳定性、速率限制都没有保障,仅适合开发测试阶段使用,不推荐生产环境部署。
  • JSONP请求:如果目标站点支持JSONP返回格式,你可以改用JSONP方式发起GET请求,Axios本身不支持JSONP,可引入第三方JSONP依赖包或者手写原生JSONP实现。该方案仅支持GET请求,且由于你需要获取的是原始HTML内容,适配性极低。
  • 优化现有服务端代理:这是生产环境最稳妥的方案,你可以给现有Flask代理服务加一层请求缓存,相同参数的请求直接返回缓存结果,无需每次都请求源站,可大幅降低服务端性能开销,同时可控性、稳定性都远高于其他前端方案。
  • 浏览器插件绕过:如果是面向个人使用的工具类页面,可引导用户安装支持关闭CORS校验的浏览器插件,插件会修改浏览器的CORS校验规则,直接允许跨域请求。该方案仅适合小众场景,无法面向普通公网用户使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:03