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

标签 node.js curl https request twitter-oauth

我正在尝试连接到 Twitter API 的公共(public)流端点。

当我运行从 nodejs 中的 twitter api 测试工具获得的示例参数时,我得到 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 

我做错了什么?它们是完全相同的请求。

最佳答案

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

关于node.js - nodejs https#request 在相同的 curl 请求成功的地方失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231684/

相关文章:

php - 如何在 Apache 中访问一个文件夹?

https - Kubernetes https入口400响应

node.js - 如何将 websocket 放入数据库(mongoDB/mongoose)?

PHP 上传 PDF 到 Google Drive API

node.js - 使用 Socket.IO 修复垃圾邮件服务器的方法?

json - 无法在 Windows 中使用 curl 发布 json 数据

curl - 命令行curl超时参数

javascript - 通过 https 使用非安全 Websocket 的 JsSip 客户端

node.js - Mongoose 模式验证不起作用

javascript - 将 process.env 变量从 Node 传递或使用到 reactjs