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

时间:2017-06-28 02:30:14

标签: curl twitter twitter-oauth libcurl

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

  

GET /1.1/users/search.json?q=%23PLLFinale HTTP / 1.1   主持人:api.twitter.com   User-Agent:PostPirate v1.0   接受: /   内容类型:application / x-www-form-urlencoded   授权:OAuth的oauth_consumer_key ="(已删除)&#34 ;, oauth_nonce =" Ts3s7nlxSN6lfK9eqJOoujc8U3FmywOU&#34 ;, oauth_signature ="(局部移除)lmMzY4YzgwY2JhMzFlYTc4ZDEwNTMyYWM1MGU1MmYxMQ%3D%3D&#34 ;, oauth_signature_method = " HMAC-SHA1",oauth_timestamp =" 1498607144",oauth_token ="(已删除)",oauth_version =" 1.0"

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

  

oauth_consumer_key =(已删除)及oauth_nonce = Ts3s7nlxSN6lfK9eqJOoujc8U3FmywOU&安培; oauth_signature_method = HMAC-SHA1&安培; oauth_timestamp = 1498607144&安培;组oauth_token =(已删除)及oauth_version = 1.0&安培; Q =%23PLLFinale

这是签名密钥:

  

(已删除)及(移除)

这里是签名基本字符串:

  

GET&安培; HTTPS%3A%2F%2Fapi.twitter.com%2F1.1%2Fusers%2Fsearch.json&安培; oauth_consumer_key%3D(去除)%26oauth_nonce%3DTs3s7nlxSN6lfK9eqJOoujc8U3FmywOU%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1498617068%26oauth_token% 3D(去除)%26oauth_version%3D1.0%26Q%3D%2523PLLFinale

以下是我收到的回复:

  

{"错误":[{"代码":32,"消息":"无法对您进行身份验证。"}] }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在我的情况下,count参数超过 100 最大允许计数,最近由Twitter API更改。因此,新的API调用URL应该在我的情况下:

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

但最令人烦恼的是我得到了

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

与Facebook API一样,不是逻辑“超出限制参数”。

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