2016-05-14 191 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