2016-05-14 33 views
7

twitter apiの公開ストリームエンドポイントに接続しようとしています。nodejs https#要求が失敗し、同じcurl要求が成功した場合

私はnodejsうtwitter APIテストツールから得た例のパラメータを実行したとき、私はあなたが私の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"})) 

を見ることができますが、私はカールにこの要求を送信する場合、それは完全にここにされて動作します以下401 unauthorizedエラーが出ます私の例のカール要求

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 

私は間違って何をしているのですか?彼らは完全に同じ要求です。

+1

'curl'は良いデバッグ情報を与えますが、' node.js'コードはありません。いくつかのデバッグ出力を得るためにhttps://www.npmjs.com/package/request-debugを使用できますか?これはリクエストがどのように同一でないかを示しているかもしれません –

+0

まず、curlを最初に呼び出してからnode.jsで同じnonceを再利用するのではないでしょうか? – mdickin

+0

@mdickinこれは単なる例です。私はtwitterのAPIツールから例を作成し、それをカールで呼び出すと動作し、新しいノードを作成すると失敗します。 – nikoss

答えて

5

OAuthリクエストでタイムスタンプをハードコードすることはできません。提示しているコードが使用しているコードであれば、これが問題の原因になる可能性があります。私はoauthパッケージを使用してAuthorizationヘッダーを生成することをお勧めします。

+0

twitterへのリクエストを取得するための動作コードがありますが、 – nikoss

関連する問題