1

我在 Settings/..../ Keys and Access Tokens 页面中生成了访问令牌,现在有一个

  • 消费者密钥
  • 消费者密钥
  • 所有者 ID(即使这可能已经生成)
  • 访问令牌
  • 访问令牌秘密

并且正在使用一个休息客户端来测试能够使用这个 api 端点提取最新的 3 个状态

https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=userIdHere&count=3

以及以下标题

  • 接受:/
  • 连接:关闭
  • 用户代理:OAuth gem v0.4.4
  • 内容类型:application/x-www-form-urlencoded
  • 内容长度:76
  • 主持人:api.twitter.com
  • 授权:OAuth
    • oauth_consumer_key=
    • oauth_signature=
    • oauth_signature_method=
    • oauth_timestamp=
    • oauth_token=
    • oauth_version=

显然,端点地址(上图)中的“userIdHere”被我的用户名替换(我知道我也可以使用我的 user_id,但这不是重点)以及被替换为实际值的“授权”值。这就是我的问题所在...

每个“oauth...”授权参数与其关联的 Twitter 生成和提供的令牌或密钥(在帖子顶部附近提到)的映射是什么?

我不断收到“400 Bad Request”响应,并认为授权失败是因为密钥位置的排列不正确。我不知道哪个值对应哪个 'oauth...' 值

最后,“Authorization”参数头的结构如下(根据 Twitter 示例中的说明)作为一行字符串值

OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9we​​JAEb", oauth_version="1.0" )

我只是想使用 GET 来获取最后 3 个状态并且无法获得。另外,我计划将值切换到环境变量,但这并不重要..

现在使用 Postman更新 ,它更擅长映射,但现在越来越

    {

"errors": [ { "code": 32, "message": "无法验证您的身份。" } ] }

4

1 回答 1

2

对于 Postman 部分,请确保将 Timestamp 和 nonce 留空,然后在点击发送之前点击“更新请求”。这将生成时间戳和随机数 - 否则您每次都会遇到授权失败。我刚刚使用我的 twitter API 凭据进行了尝试,它可以工作。

对于 Oauth gem 代码,我觉得奇怪的是你有一个请求Content-TypeContent-Length标头。GET看起来400 Bad request可能是因为您试图对POST仅支持GET. 事实上,当我尝试对POST那个端点做一个时,它会告诉我。

{
  "errors": [
    {
      "code": 86,
      "message": "This method requires a GET or HEAD."
    }
  ]
}

所以 400 实际上是个好消息 - 这意味着授权有效,您只是以错误的方式调用 API。

于 2017-03-16T16:29:18.250 回答