2016-05-14 195 views
7

我正在嘗試連接到twitter api的公共流端點。nodejs https#請求失敗,其中相同的curl請求成功

,當我跑的示例參數我從Twitter的API測試工具中的NodeJS了,我得到401 unauthorized錯誤下面你可以看到我的NodeJS例如要求

'use strict'; 
const https = require('https'); 
const qs = require('querystring'); 
const obj = { 
    method: "POST", 
    headers: { 
     Authorization: 'OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"' 
    }, 
    hostname: "stream.twitter.com", 
    path: "/1.1/statuses/filter.json" 
} 
https.request(obj,res => { 
    res.on("data", d => { 
     console.log(d.toString()); 
    }); 
}).end(qs.stringify({track:"javascript"})) 

但是,如果我用捲曲發送該請求,它完美的作品在這裏我的例子捲曲請求

curl --request 'POST' 'https://stream.twitter.com/1.1/statuses/filter.json' --data 'track=javascript' --header 'Authorization: OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"' --verbose 

我在做什麼錯?他們是tottaly相同的請求。

+1

'curl'給你一些很好的調試信息,但是'node.js'代碼沒有。你可以使用https://www.npmjs.com/package/request-debug獲得一些調試輸出嗎?這可能會告訴你以何種方式請求不相同 –

+0

可以肯定的是,你不是先調用'curl',然後重複使用與node.js相同的nonce,對吧? – mdickin

+0

@mdickin這只是一個例子,我創建了一個示例,從Twitter上的API工具調用它通過捲曲它的作品,然後創建新的調用它與nodejs它失敗 – nikoss

回答

5

您無法對OAuth請求中的時間戳進行硬編碼。如果您提供的代碼是您正在使用的代碼,那麼這可能是問題的原因。我建議您使用oauth包生成授權標頭。

+0

我有一個工作代碼獲取請求Twitter,但相同的代碼失敗的流 – nikoss