无法从我自己的网站拨打Steam api网站(安全问题)

时间:2014-08-25 01:44:45

标签: javascript jquery ajax webserver steam-web-api

我正在尝试创建一个使用Steam网络api的网络应用程序,总体而言我对如何启动此应用程序感到非常困惑。This问题基本上概述了我的问题,而我不知道如何创建端点并解决这个问题。

目前我的Web服务器有Apache Tomcat,我在Notepad ++中编写了所有html / css / javascript代码。我不想使用jQuery,因为我不知道我是否需要。现在,我想做的只是从steam的apis中获取数据。

例如,使用此api:

http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend

我只想抓住用户的朋友列表。问题是,正如我上面提到的问题,我无法从我自己的网站调用steam apis,而且我不知道如何在我的服务器上创建端点并解决这个问题。

非常感谢任何帮助。我对这一切都很陌生,而且它绝对令人困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用mod_proxy将服务器的请求代理到Steam网站。首先需要在Apache中启用重写和mod代理

a2enmod rewrite
a2enmod proxy
apache2ctl reload

我们假设您的网站为www.example.com,并且您的服务器上的网络根目录为/var/www。创建目录/var/www/steamapi。在此目录中,使用以下

创建名为.htaccess的文件
RewriteEngine On
RewriteRule ^(.*)$ http://api.steampowered.com/$1 [P]

[P]告诉Apache代理请求。现在,不要向api.steampower.com发出请求,而是在XHR / AJAX url参数中使用下面的绝对url

/steamapi/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend

Apache会将请求重写为下面的URI并将结果代理回给您。您的浏览器不会抱怨,因为您正在向同一个域发出请求。

http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend

答案 1 :(得分:0)

据我所知,对于Steam的公共API,他们不应该像上面的答案所说的那样需要一个代理来做AJAX请求(这是我假设你正在做的事情),因为他们肯定必须实现CORS。此外,这只是一个浏览器限制,不应该影响任何服务器端。

限制Dustin试图解释如何解决如何向域上的站点发出AJAX请求,该域与您请求的不允许CORS(跨源资源共享)的域不同。因此,网站会将数据发送到代理服务器,该代理服务器设置为代表它发出请求并返回数据。

您能详细说明在尝试提出请求时遇到的错误吗?

我假设您使用的是此处找到的API, https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerSummaries_.28v0001.29

在这种情况下,我不得不问,如果你看到所有X都在哪里,那么这些就是URI中的占位符。您应该拥有一个Steam Web API密钥,而不是X,您可以从此处注册:

https://steamcommunity.com/dev/apikey

我不确定域名在注册时是否重要,因为我以前重新调整了密钥。

请注意,Valve的公共API非常有限,并且网上浮动的一些库不使用它们,而是为其主站点反向设计Valve的Oauth登录代码以使用私有的,未记录的Web API,或者他们以某种方式逆向设计了桌面客户端本身。