【问题标题】:How to correctly format outbound GET requests that contain data in Node.js如何正确格式化包含 Node.js 中数据的出站 GET 请求
【发布时间】:2013-10-23 03:02:08
【问题描述】:

我正在开发我的 iOS 游戏的后端,我想在将任何数据发送回客户端之前验证我的服务器上的 Facebook 登录。我有 Facebook 提供的有效 app_access 令牌,并且能够在浏览器中成功输入以下链接以调试/验证访问令牌:

https://graph.facebook.com/debug_token?input_token=users_access_token&access_token=apps_access_token

当然,正确的访问令牌放置在占位符中。从该请求中,我收到了如下所示的响应:

{
   "data": {
      "app_id": app_id,
      "is_valid": true,
      "application": "My App",
      "user_id": user_id,
      "expires_at": 1382468400,
      "scopes": [
         "email",
         "publish_actions",
         "user_birthday",
         "user_location"
      ]
   }
}

从中我可以确定用户是否拥有正确的访问令牌。然而,试图从服务器端实现这一点是徒劳的。这是我现在正在尝试的方法

var http = require('http'); 
var https = require('https');
var querystring = require('querystring');

var data = querystring.stringify({
    'access_token': app_access_token,
    'input_token': user_access_token
});

console.log('' + data); //Debug to see if data is correctly formatted

var options = {
    host: 'graph.facebook.com',
    port: 443,
    path: '/debug_token',
    method: 'GET',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(data)
    }
};

var req = https.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});

req.write(data);
req.end();

它总是返回以下响应:

body: {"error":{"message":"(#100) You must provide an app access token or a user access token that is an owner or developer of the app","type":"OAuthException","code":100}}

我注意到查询字符串确实倾向于格式化“|”进入“%7C”,但我手动替换了字符和数据字符串无济于事。有什么我做错了吗?标记是正确的,我似乎无法正确格式化数据。

编辑

终于搞定了。迈克尔斯的解决方案是正确的。我之前尝试了相同的解决方案,但它没有工作,因为我执行了 http.request() 而不是 https.request() 并且我忘了再试一次。这么愚蠢的错误。谢谢!

【问题讨论】:

    标签: javascript facebook node.js facebook-graph-api https


    【解决方案1】:

    GET 参数作为查询字符串传递,是路径 /path?param1=val1&param2=val2 的一部分。你的情况

    path: '/debug_token?'+data,
    

    而不是req.write(data)

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多