2017-12-31 116 views
0

derzeit versuche ich die https.get-Funktion zu verwenden, um Tokens abzurufen sowie allgemeine API-Aufrufe an Yahoo. Ich scheine in der Lage zu sein, es zum Funktionieren zu bringen, wenn ich eine lange Abfragezeichenkette baue und sie in die URL hinzufüge, die ganze URL-Zeichenkette als das erste Argument übergebend.Constructing Nodejs HTTPS Get Payload

var finalUrl = host + path + "?" + paramString; 

return new Promise(function(resolve, reject) { 
    var data = { 
     "error_str": "", 
     "errno": 0, 
     "return_code": 0, 
     "contents": "" 
    } 
    console.log("In promise function"); 
    console.log("finalUrl: " + finalUrl); 
var options = { 
    "host": host, 
    "path": path, 
    "headers": params, 
    "timeout": 2 
}; 

console.log("options: " + JSON.stringify(options)); 

https.get(finalUrl, (res) => { 
// resolves 

aber wenn ich versuche, https.get mit den Optionen Objekt, so kann ich das Timeout für mehr datenintensive Anrufe einzustellen, scheitert es

https.get(options, (res) => { 
// rejects 

die endgültigen URL Erträge Drucken:

finalUrl:

https://api.login.yahoo.com/oauth/v2/get_request_token?oauth_callback=oob&oauth_consumer_key=my_consumer_key&oauth_nonce=334283&oauth_signature_method=PLAINTEXT&oauth_timestamp=1514728974491&oauth_version=1.0&xoauth_lang_pref=en-us&oauth_signature=my_comsumer_secret%26

Inzwischen, wenn ich Optionen konstruieren sieht es aus wie dieses

{ 
    "host":"https://api.login.yahoo.com", 
    "path":"/oauth/v2/get_request_token", 
    "headers":{ 
     "xoauth_lang_pref":"en-us",  
     "oauth_callback": "oob",     `                           
     "oauth_consumer_key":"my_consumer_key",` 
     "oauth_nonce":334283, 
     "oauth_signature_method":"PLAINTEXT", 
     "oauth_timestamp":1514728974491, 
     "oauth_version":"1.0", 
     "oauth_signature":"my_consumer_secret&" 
    }, 
    "timeout":2 
} 

jedoch eine mit dieser Nutzlast Ausbeuten

Getaddrinfo ENOTFOUND https://api.login.yahoo.comhttps://api.login.yahoo.com:443

Antwort

0
bekommen Durchführung

Es gibt zwei große Probleme mit der Art und Weise Sie bauen das Objekt options.

Die erste ist, dass das host Element nur den Zielhostnamen angeben soll, in diesem Fall "api.login.yahoo.com". Der "https:" Teil sollte in einem separaten Artikel angegeben werden. Deshalb erhalten Sie den ENOTFOUND Fehler.

Die zweite ist, dass die Abfragezeichenfolge als Teil des Elements path enthalten sein soll. Sie sollten also den Inhalt des Elements path genau wie bei der Erstellung von finalUrl erstellen. Der Artikel headers wird für einen ganz anderen Zweck verwendet. Es ermöglicht Ihnen, zusätzliche HTTP-Anforderungsheader und keine Abfragezeichenfolgenelemente anzugeben. Sie benötigen hier keinen Artikel headers.

Sie können alles über die options Elemente in der Node.js Dokumentation unter https://nodejs.org/docs/latest-v6.x/api/http.html#http_http_request_options_callback lesen, obwohl die meisten Optionen in diesem Fall irrelevant sind. Sie müssen nur die Elemente host, und path verwenden. Diese Webseite wird Ihnen sagen, warum der Artikel timeout, den Sie gerade haben, ineffektiv ist.