一尘不染

Steam API访问控制允许来源问题

node.js

Web编程有些新知识,对此有些困惑。我有一个提供网站的基本express.js web服务器。我想将一个Gameid交给一个函数,并让其使用其Web
API从Steam抓取成就信息,应该使用以下REST API调用来支持该信息:

https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPercentagesForApp_.28v0002.29

我正在处理一个脚本文件,我试图在这样的客户端文件中进行请求。

function GetSteamGameAchievements(appid)
{
   var request = new XMLHttpRequest();

    request.addEventListener('load',function(){

       console.log(JSON.stringify(this.responseText));

    });

    request.open("GET","http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid="+ appid + "&format=json",true);

    request.send(null);
}

我收到以下错误

XMLHttpRequest无法加载
http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid=440&format=json。所请求的资源上没有“
Access-Control-Allow-Origin”标头。因此,不允许访问源’ http://
localhost:3000
‘。

我已经读过一些有关该错误的信息,但它似乎需要更改服务器端代码。尽管所有服务器端代码都执行以下操作:

// Add headers
app.use(function (req, res, next) {

  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://api.steampowered.com');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});

使用Open Weather API(这是唯一的其他第三方REST api),我可以使用原始代码之类的东西来工作,因此我不确定Steam
API为何无法正常工作。使用邮递员,我提交的查询字符串很好,但是当我在客户端javascript中执行此操作时,证券有问题…但不是开放天气API
…我不确定为什么它适用于一个但其他人没有。任何帮助将不胜感激,我已经遍历了一些类似的话题,但是我认为我的笨拙使我很难理解我要去哪里以及应该在哪里进行正确的修复。


阅读 883

收藏
2020-07-07

共1个答案

一尘不染

我已经读过一些有关该错误的信息,但它似乎需要更改服务器端代码。

是-通过您 要从中 读取数据的服务。即通过蒸汽。

您不能授予自己使用访问者的浏览器从其他人的站点读取数据的权限。

由于您无法更改Steam的服务器,因此您需要使用服务器而不是访问者的浏览器从Steam获取数据。

2020-07-07