获取维基百科令牌的问题

时间:2017-01-28 14:49:34

标签: jquery wikipedia-api

我正在尝试使用以下代码获取Wikipedia编辑令牌:

$.getJSON("https://en.wikipedia.org/w/api.php?action=query&meta=tokens&format=json&callback=?", function (data) {
    console.log( data );
});

但是,我收到此错误:

  

“未应用同源策略时,可能无法获取标记。”

使用jQuery获取令牌的正确方法是什么?

编辑:我尝试了以下方法(基于评论):

  • 删除回调=?并添加origin = * - 抛出原始令牌错误
  • 使用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错误。

1 个答案:

答案 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请求。

对于所有这些我说“谢天谢地”。