在相同的curl请求成功的情况下,nodejs https#请求失败

我正在尝试连接到twitter API的公共stream端点。

当我运行示例参数我从twitter api的testing工具在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它完美的作品在这里是我的例子curl请求

 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相同的请求。

您无法在OAuth请求中对时间戳进行硬编码。 如果您提供的代码是您正在使用的代码,那么这可能是问题的原因。 我build议你使用oauth包生成授权标题。