为什么 Twitter API 给我代码 32(无法验证)错误?

Why does the Twitter API give me a code 32 (could not authencate) error?

我正在尝试向 Twitter REST api 发出搜索请求。 这是我的要求:

GET /1.1/users/search.json?q=%23PLLFinale HTTP/1.1 Host: api.twitter.com User-Agent: PostPirate v1.0 Accept: / Content-Type: application/x-www-form-urlencoded Authorization: OAuth oauth_consumer_key="(removed)", oauth_nonce="Ts3s7nlxSN6lfK9eqJOoujc8U3FmywOU", oauth_signature="(partially-removed)lmMzY4YzgwY2JhMzFlYTc4ZDEwNTMyYWM1MGU1MmYxMQ%3D%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1498607144", oauth_token="(removed)", oauth_version="1.0"

这里是我签名的参数字符串:

oauth_consumer_key=(removed)&oauth_nonce=Ts3s7nlxSN6lfK9eqJOoujc8U3FmywOU&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1498607144&oauth_token=(removed)&oauth_version=1.0&q=%23PLLFinale

这是签名密钥:

(removed)&(removed)

这里是签名基础字符串:

GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fusers%2Fsearch.json&oauth_consumer_key%3D(removed)%26oauth_nonce%3DTs3s7nlxSN6lfK9eqJOoujc8U3FmywOU%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1498617068%26oauth_token%3D(removed)%26oauth_version%3D1.0%26q%3D%2523PLLFinale

这是我收到的回复:

{"errors":[{"code":32,"message":"Could not authenticate you."}]}

计算签名有误。我没有意识到我的 HMAC-SHA1 计算结果是一系列十六进制字节。我将它们视为一个字符串,并将它们直接传递到我的 base64 转换函数中。 我还建议使用它来检查您的签名基本字符串: http://quonos.nl/oauthTester/

在我的例子中,count 参数超过了 100 最大允许计数 ,最近由推特API。所以,新的权利 API 调用 URL 应该是在我的情况下:

https://api.twitter.com/1.1/statuses/user_timeline.json?count=100

但最烦人的是我越来越

{"errors":[{"code":32,"message":"Could not authenticate you."}]}

而不是逻辑 "limit param exceeded" 像 Facebook API。

这只是您会遇到此误导性错误并最终得到完全不同的东西的情况之一。