【问题标题】:How to fetch a Wikipedia webpage with AJAX or fetch()如何使用 AJAX 或 fetch() 获取 Wikipedia 网页
【发布时间】:2016-01-14 13:12:55
【问题描述】:

我想在浏览器中动态获取 Wikipedia 网页,以便使用 XSLTProcessor 进一步处理 XHTML。

很遗憾,这不起作用,因为我无法让 Wikipedia 在 HTTP 响应中发送“Access-Control-Allow-Origin”标头。

我尝试包含https://www.mediawiki.org/wiki/Manual:CORS 中所述的“origin”参数,但没有成功。

获取完整的网页 HTML 对我来说很重要,因为它是在导航到该页面时由浏览器获取的,因此 MediaWiki API 对我来说是不可能的。

这是我尝试过的:

var url = "https://en.wikipedia.org/wiki/Star_Trek?origin=https://my-own-page.com";

fetch(url).then(function(response){
    console.log(response);
});

【问题讨论】:

  • 也许给 Jimmy Wales 更多的钱 :) 您不能强制网站提供尚未配置为服务的标题。但是,您可以编写自己的服务器端代理来获取内容。
  • 好的,所以这是不可能的。我想也许我做错了什么。是的,服务器端代理或脚本可以完成这项工作。

标签: javascript ajax mediawiki wikipedia wikipedia-api


【解决方案1】:

很遗憾,这不起作用,因为我无法让 Wikipedia 在 HTTP 响应中发送“Access-Control-Allow-Origin”标头。

不,你不能。由 Wikipedia 决定是否要明确授予在其他站点上运行的 JavaScript 访问其页面的权限。

由于这会导致用户的个人信息泄露(例如登录的维基百科页面显示用户的用户名,这可能被用来增强网络钓鱼攻击),这显然是不可取的。

var url = "https://en.wikipedia.org/wiki/Star_Trek?origin=https://my-own-page.com";

origin 是 HTTP 请求标头,而不是查询字符串参数,它会自动包含在跨源 XMLHttpRequest/fetch 请求中,您无需做任何特殊操作。

【讨论】:

  • 感谢您的回答。在我在问题中链接的 MediaWiki 页面上的 jQuery 示例中,它们实际上确实将 origin 作为 GET 请求 URL 的查询字符串参数发送,不是吗?
  • 确实如此,这很奇怪,没有必要,而且有点容易出错。 (虽然该文档是针对 API 而不是主站点,但它要求在 mediawiki 配置中将来源列为白名单)。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多