2016-05-14 16 views
7

Ich versuche eine Verbindung zum öffentlichen Stream Endpunkt von twitter api herzustellen.nodejs https # Anfrage fehlschlägt, wo identische curl Anfrage erfolgreich ist

Wenn ich beispielsweise Parameter lief ich von twitter api Test-Tool bekam in NodeJS i bekommen 401 unauthorized Fehler unten können Sie meine NodeJS Beispiel Anfrage

'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"})) 

sehen, aber wenn ich diese Anfrage mit curl senden hier funktioniert es perfekt ist mein beispiel locken anfrage

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 

was mache ich falsch? sie sind totally identische anfragen.

+1

'curl' gibt Ihnen einige gute Debug-Informationen, aber der' node.js' Code nicht. Können Sie https://www.npmjs.com/package/request-debug verwenden, um Debug-Ausgaben zu erhalten? Dies kann Ihnen zeigen, wie die Anfragen nicht identisch sind. –

+0

Nur um sicher zu sein, rufen Sie nicht zuerst 'curl' an und verwenden dann dasselbe nonce mit node.js, richtig? – mdickin

+0

@mdickin dies ist nur ein Beispiel ich erstelle ein Beispiel von api tools auf twitter Aufruf es durch curl es funktioniert dann erstellen neue caling es mit nodejs es scheitert – nikoss

Antwort

5

Sie können den Zeitstempel in der OAuth-Anforderung nicht fest codieren. Wenn der Code, den Sie präsentieren, derselbe ist, den Sie verwenden, könnte dies die Ursache des Problems sein. Ich empfehle Ihnen, das oauth Paket zu verwenden, um den Autorisierungsheader zu erzeugen.

+0

Ich habe einen Arbeitscode für Anfragen erhalten, twitter, aber der gleiche Code schlägt für Streams – nikoss