nodejs https#request在相同的curl请求成功的地方失败

时间:2016-05-14 20:46:38

标签: node.js curl https request twitter-oauth

我正在尝试连接到twitter api的公共流端点。

当我运行我从nodejs中的twitter api测试工具获得的示例参数时,我得到 '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"})) 错误,你可以看到我的nodejs示例请求

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 

但是,如果我用curl发送此请求,那么这里完全有效的是我的示例curl请求

sudo gcc mksuid.c -lshadow -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW

我做错了什么?它们完全相同。

2 个答案:

答案 0 :(得分:5)

您无法对OAuth请求中的时间戳进行硬编码。如果您呈现的代码是您正在使用的代码,那么这可能是问题的原因。我建议您使用oauth包来生成Authorization标头。

答案 1 :(得分:0)

同样的事情发生在我身上,我最终使用 axios 库来解决这个问题。

不确定 axios 和内置的 https 请求有什么区别,但事实是使用 axios 可以在 https 请求失败的地方工作。 (并且 curl 也有效。)