- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
这个问题与 another question 有关,这是一年前问的。作者询问如何使用 JavaScript 和维基百科 API 发出跨源请求,一条评论是:
en.wikipedia.org doesn't seem to allow CORS
他被建议改用 JSONP。
我知道我可以使用 JSONP,但如果可以的话,我更喜欢 CORS。
我试过 jsfiddle
var url = "https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json";
$.ajax({
url: url,
data: 'query',
dataType: 'json',
type: 'POST',
headers: { 'Api-User-Agent': 'Example/1.0' },
origin: 'https://jsfiddle.net/',
success: function (data) {
console.log(data);
//do something with data
}});
并得到以下错误:
XMLHttpRequest cannot load https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://fiddle.jshell.net' is therefore not allowed access.
请求 header :
authority:en.wikipedia.org
method:OPTIONS
path:/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json
scheme:https
accept:/
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8,fr-CA;q=0.6,fr;q=0.4,fr-FR;q=0.2,ru;q=0.2,uk;q=0.2
access-control-request-headers:accept, api-user-agent, content-type
access-control-request-method:POST
origin:https://fiddle.jshell.net
referer:https://fiddle.jshell.net/_display/
user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36
响应头:
accept-ranges:bytes
age:0
backend-timing:D=33198 t=1462749020308717
cache-control:no-cache
content-encoding:gzip
content-length:20
content-type:text/html
date:Sun, 08 May 2016 23:10:20 GMT
p3p:CP="This is not a P3P policy! See https://en.wikipedia.org/wiki/Special:CentralAutoLogin/P3P for more info."
server:mw1114.eqiad.wmnet
set-cookie:CP=H2; Path=/; secure
set-cookie:GeoIP=US:MA:Waltham:42.37:-71.24:v4; Path=/; secure; Domain=.wikipedia.org
set-cookie:WMF-Last-Access=08-May-2016;Path=/;HttpOnly;secure;
Expires=Thu, 09 Jun 2016 12:00:00 GMT
status:200
strict-transport-security:max-age=31536000; includeSubDomains; preload
vary:Accept-Encoding
via:1.1 varnish, 1.1 varnish
x-analytics:https=1;nocookies=1
x-cache:cp1066 pass+chfp(0), cp1055 frontend pass+chfp(0)
x-client-ip:146.115.167.51
x-content-type-options:nosniff
x-powered-by:HHVM/3.12.1
x-varnish:2807049448, 2537048470
因此,我需要确认 CORS 不适用于 Wikipedia API,我需要使用 JSONP。
最佳答案
要向维基百科发出 JavaScript Fetch/XHR 请求,请将 origin=*
添加到 URL 查询参数。
所以问题中 URL 的基础应该是这样的:
https://en.wikipedia.org/w/api.php?origin=*&action=query…
参见 the CORS-related docs for the Wikipedia backend :
For anonymous requests,
origin
query string parameter can be set to*
which will allow requests from anywhere.
参见 “Enable cross-domain API requests in API's JSON responses” ,维基媒体网站的一个开放错误,表明它们目前仅支持从不同维基媒体网站本身到其他维基媒体网站的 CORS 请求,但它们不支持来自外部网站的 CORS 请求。
具体参见https://phabricator.wikimedia.org/T62835#2191138 (自 2016 年 4 月 8 日起)这是一个摘要,表明他们正在考虑进行更改以允许来自外部站点的 CORS 请求,但他们尚未启用它。
看来他们会是deploying CORS support today :
unauthenticated cross-domain API requests are now possible. This should be deployed to WMF wikis with 1.128.0-wmf.10, see https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap for the schedule
https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap表示 1.128.0-wmf.10 部署日期为 2016 年 7 月 12 日至 2016 年 7 月 14 日。
作为torvin备注 in a comment below :
to trigger the new behaviour, you need to specify
origin=*
in your url params. This is currently buried in the T62835 discussion and is not stated in the documentation yet.
关于javascript - Wikipedia API 是否支持 CORS 或仅支持 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106041/
我正在尝试在维基百科上找到所有图像的完整列表,然后我可以将其过滤到公共(public)领域的图像。我已经从这里下载了 SQL 转储: http://dumps.wikimedia.org/enwiki
我正在学习使用 rasa 语言。为了使目标的答案多样化,我决定使用 Wikipedia api。为了创建我的工作环境,我使用带有以下命令的 anaconda: conda create --name
本页:http://wikidata.dbpedia.org/downloads/20160111/ 有一个名为 wikidatawiki-20160111-page-ids.ttl.bz2 的转储
这个问题已经有答案了: How to get the Infobox data from Wikipedia? (8 个回答) 已关闭 3 年前。 维基百科文章可能有信息框模板。通过以下调用,我可以获
我正在使用 Wikipedia API,在其中获取我输入的某些字符串的图像。 它总是返回 10 个结果,但我想要超过大约 50 个。 https://en.wikipedia.org/w/api.ph
我需要从 jquery(首选)或 php 数组中的特定维基百科文章获取“外部链接”链接。我已经浏览了维基百科 api,但似乎没有办法做到这一点。看起来 dbpedia 有一种方法可以做到这一点(dbp
我想在 python 程序中访问给定文章标题的维基百科信息框图像。有人可以告诉我如何获得吗? 以下截图提供了页面中所有图像的列表。我只想访问信息框图像。我该怎么做? import wikipedia
给定维基百科上的任何页面,例如 Coffee 的页面,我试图弄清楚如何提取页面上所有引用(包括任何元数据)的列表。乍一看,这似乎很容易,因为大多数页面都将它们全部列在称为“引用”的部分下。但是,当您检
我想计算特定语言的 wiki 转储中的实体/类别,比如英语。对于初学者来说,很难找到/遵循官方文档。到目前为止我所了解的是我可以下载一个 XML 转储(我从所有可用的不同文件中下载什么),并解析它(?
是否有任何 API 可以使用该页面的标题或页面 ID 或 url 获取页面的所有类别?我尝试在网上搜索,但我能找到的只是获取特定类别的转储。任何形式的帮助将不胜感激。 谢谢 最佳答案 您正在寻找的 A
Closed. This question is off-topic。它当前不接受答案。 想要改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic。 9年前
我正在尝试构建维基百科文章及其类别的树形图。我需要做什么? 从这个站点(http://dumps.wikimedia.org/enwiki/latest/),我下载了: enwiki-latest-p
我使用 Wikipedia API 检索给定类别的页面列表。然而,页面由它们的 page_id 表示。如何使用 Wikipedia API 通过 page_id 获取页面的实际文本内容 最佳答案 AF
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
以这个Freebase查询为例,如何使用Wikidata API运行相同的查询? [{ "id": null, "name": null, "type": "/film/film",
有没有一种方法可以使用 MediaWiki API 或任何其他工具自动检索使用大概日期的维基百科文章的先前版本(不知道 'oldid' 值)? 例如,我如何检索 history version of
从Wikipedia获取有关人员的所有文章的最简单方法是什么?我知道我可以下载所有页面的转储,但是然后如何过滤这些页面并仅获取有关人员的页面?我需要尽可能多的东西(最好超过一百万),因此使用任何一种A
有这个花哨的infobox在 中。如何获得 的值? 最佳答案 错误的方法:尝试解析 HTML Use (cURL/jQuery/file_get_contents/requests/wget/mor
我需要检索某个 wiki 项目的所有现有语言的列表。例如,所有 Wikivoyage或全部Wikipedia语言,就像他们的登陆页面一样。 如果可能的话,我更喜欢通过 MediaWiki API 来完
我需要访问非常旧的法语维基百科转储(维基百科的备份)。我成功地从 archive.org 找到了 2010 年的备份,现在我正在搜索 2006 年甚至更早的版本。我知道在最新的转储中包含以前的所有数据
我是一名优秀的程序员,十分优秀!