6

在我的节点应用程序项目中,我已将 Twitter API 从 v1.0 迁移到 v1.1。我在我的日志文件中发现了一些错误。

错误

{"message":"Could not authenticate you","code":32}

原因

如果发布数据(到 1.1/statuses/update)包括...

  • '
  • (
  • )
  • *

解决方案

我已经修补了 node-oauth 的 node_modules/oauth/lib/oauth.js(仅使用了 node-twitter)...

327   if( (method == "POST" || method == "PUT")  && ( post_body == null && extra_params != null) ) {
328     post_body= querystring.stringify(extra_params);
329   }

 327   if( (method == "POST" || method == "PUT")  && ( post_body == null && extra_params != null) ) {
 328     post_body= querystring.stringify(extra_params);
+331     post_body= post_body.replace(/\!/g, "%21")
+332                         .replace(/\'/g, "%27")
+333                         .replace(/\(/g, "%28")
+334                         .replace(/\)/g, "%29")
+335                         .replace(/\*/g, "%2A");
 336   }

Twitter API v1.0 不需要这个补丁。只有 v1.1 需要此补丁双重转义帖子正文。我认为我的补丁不是通用的,因为这种更改将使该库无法用于任何其他 oauth 服务...

我的问题

  • 这是 node-oauth 问题还是 Twitter API 问题(Twitter Spec chage 或 bug)?
  • 我应该向谁报告这个问题?
4

2 回答 2

2

这是 node-oauth 问题还是 Twitter API 问题(Twitter Spec chage 或 bug)?

来自@episod 的引用:
“API v1.1(以及我们所有的 API)对 OAuth 和 HTTP 的要求越来越严格。在 HTTP 规范中,一些字符需要在 URL 和 POST 正文中进行编码,包括括号和单引号。”

我应该向谁报告这个问题?

这是问题线程:https ://dev.twitter.com/discussions/12821

于 2013-06-19T09:45:16.297 回答
1

我也遇到过同样的问题。我尝试了 2 个不同的 twitter 库(node-twitter 和 ntwitter)。两者都与 1.1 api 有相同的问题。你的修复似乎对我有用。感谢那!有趣的是,他们在第 66 行应用了相同的修复。不确定,但看起来这是 node-oauth 的错误。我会先在那里报告。您的修复似乎并没有破坏我在 facebook 上所做的基本工作,所以我希望这是一个好兆头,表明此修复不会影响其他库。

于 2013-02-03T22:51:17.680 回答