我正在尝试使用以下代码获取Wikipedia编辑令牌:
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&meta=tokens&format=json&callback=?", function (data) {
console.log( data );
});
但是,我收到此错误:
“未应用同源策略时,可能无法获取标记。”
使用jQuery获取令牌的正确方法是什么?
编辑:我尝试了以下方法(基于评论):
使用here中的修改示例:
$.ajax( {
url: 'https://en.wikipedia.org/w/api.php',
data: {
action: 'query',
meta: 'tokens',
format: 'json',
origin: 'http://example.com'
},
xhrFields: {
withCredentials: true
},
dataType: 'json'
}).done( function ( data ) {
console.log(data);
});
这将返回评论中提到的Cross-Origin错误。
答案 0 :(得分:3)
这是不可能的。
您是否真的希望互联网上的任何网站能够使用您的浏览器/ IP地址/维基百科登录详细信息来编辑维基百科?我当然不会。
Mediawiki(维基百科背后的软件)的设立是为了防止这种情况发生。基本上,您不能从其他域执行任何状态更改操作(例如,编辑,登录,任何其他更改任何内容)。您基本上只能执行获取信息而不会更改任何内容的请求。如果您(a)从该特定wiki域发出请求或(b)wiki配置为使用CORS支持您的特定服务器,则只能使用浏览器中的Mediawiki API。
来自the API page on data formats:
在回调模式下使用JSON时,会禁用许多安全性:
- 登录后,客户端也被视为匿名用户(即未登录)
无法获取令牌(因此无法进行状态更改操作) 即使在通过
action=login
这意味着需要其他权限的内容(例如
rcprop=patrolled
)将无效,除非允许匿名用户使用
除非为您的域明确启用,否则任何状态更改操作(see "cross-site requests")也无法使用CORS请求。
对于所有这些我说“谢天谢地”。