2017-01-20 9 views
0

Ich versuche derzeit eine CURL-Anfrage mit Knoten zu machen.Convert PHP CURL in NPM CURL

Ich habe folgende ROTATION Anfrage in PHP: -

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://www.website.com'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: token XXX', 
    'Content-Type: application/json' 
)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 

curl_close($ch); 

Ich brauche diese gleiche ROTATION Anfrage in Knoten auszuführen. Ich habe viele verschiedene NPM-Pakete versucht und mich auf curljs festgelegt.

Ich habe den folgenden Code: -

var curl = require("curljs"); 

var curlOpts = curl.opts.connect_timeout(10); 

curl("https://www.website.com -H Authorization: token XXX -H Content-Type: application/json --get", curlOpts, function(err, data, stderr) { 
    console.log(err); 
    console.log(data); 
    console.log(stderr); 
}); 

Ich bin in der Lage, eine Antwort vom Server ohne Fehler zu bekommen, aber es kehrt keine Daten. erhalte ich die folgende Antwort: -

null 

    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
    0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 

Würde mit einem Stoß in der richtigen Richtung zu helfen, jemand in der Lage sein?

Jede Hilfe würde sehr geschätzt werden.

Auf einer anderen Anmerkung: -

Ich habe auch versucht request

Hier zu verwenden ist mein Code: -

var request = require('request'); 

var options = { 
    url: 'https://www.website.com', 
    headers: { 
    'Authorization': 'token XXX', 
    'Content-Type': 'application/json' 
    } 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
    var info = JSON.parse(body); 
    console.log(info); 
    } else { 
    console.log(body); 
    } 
} 

request.get(options, callback); 

Aber es hält einen Fehler zurückgegeben.

Mit node-fetch liefert auch die gleichen Fehler: -

fetch("https://www.website.com", { 
    method: "GET", 
    headers: { 
    Authorization: "token XXX", 
    "Content-Type": "application/json" 
    } 
}).then(function(response) { 
    return response; 
}).then(function(response) { 
    console.log(response); 
}); 

Die PHP-Version perfekt funktioniert, bin ich nicht die Header richtig zu konfigurieren?

+0

Ich bin von PHP zu Node bewegt. Eine der besten Eigenschaften von Node ist die Möglichkeit, HTTP-Anfragen zu stellen. Müssen Sie CURL verwenden? Ich vermute, deine Aufgabe wäre besser mit einer Bibliothek wie RequestJS erledigt. Ich möchte nie wieder curl_setopt :) –

+0

Ich versuche, JSON von einer API-Anfrage zurückzugeben. Würdest du mit RequestJS ein Beispiel geben können? Ich bin nicht auf die Verwendung von Curljs, schien nur das Beste der Pakete, die ich finden konnte. –

+1

Es gibt viele Möglichkeiten, JSON zu erhalten. Mein Favorit ist holen. Verwenden Sie es einfach wie im Browser. npm installiert node-fetch. Dann 'fetch ('http://www.website.com'). Dann (res => res.json()). Dann (res => // etwas tun)'. Wenn Sie Autorisierungsheader benötigen, können Sie das auch tun. RequestJS kann es auch tun. Kommt nur auf deine Vorliebe an. Ich habe beides benutzt. –

Antwort

0

HTTP-Anforderungen werden in Node.js eingebettet. Die Module http und https sind einige der Kernmodule: Sie werden installiert, ohne dass Sie etwas anderes tun müssen.

Sie sind jedoch nicht ganz einfach zu bedienen. Sie sind nicht komplex per se, aber sie könnten einfacher sein.

Die netteste Implementierung in meinem Kopf ist die fetch API. Dies ist in modernen Webbrowsern enthalten (see MDN). Sie können auch durch die Installation des node-fetch module in Knoten verwenden:

npm install node-fetch --save 

können Sie dann Ihren Anruf die fetch Funktion. Sie erhalten die Ergebnisse in einer netten, modernen ES6-ähnlichen Art und Weise, indem Sie Promise s verwenden.

In Ihrem Fall:

fetch("http://www.website.com", { 
    method: "GET", // not strictly necessary 
    headers: { 
    Authorization: "token XXX", 
    "Content-Type": "application/json" // is this accurate?! 
    } 
}).then(function(response) { 
    return response.json(); // we want JSON output 
}).then(function(response) { 
    console.log(response); // logs the server response 
}); 

können Sie diese noch schöner machen, wenn Sie bereit sind, Funktionen moderner Pfeil zu verwenden.

+0

Dies ist immer noch eine 404, es ist seltsam, wie die PHP-Version meines Skripts zieht Inhalt von der API, aber egal, was ich mit Knoten versucht habe, bekomme ich einen 404. –

+0

@TonyHensler Einige APIs mögen einen netten 'Benutzer-Agenten' Satz: Sie könnten das versuchen. Aber es ist sehr hart gegen eine Ressource zu codieren, wenn Sie nicht wissen, was es ist! – lonesomeday

+0

Ich habe versucht, einen User-Agent dort zu setzen, aber es gibt immer noch das gleiche Ergebnis. Es ist sehr frustrierend, wie es in PHP perfekt funktioniert, aber ich kann keine Antwort mit Knoten bekommen. –

-1

Aktualisiert

Ich glaube, Sie einfach request verwenden können.

Beispiel in Ihrem Szenario:

var request = require('request'); 

var options = { 
    url: 'https://www.website.com', 
    headers: { 
     "Authorization": "token XXX", 
     "Content-Type": "application/json" 
    } 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(response); 
     console.log(body); 
    } 
} 

request(options, callback); 

Das Modul ist einfach zu bedienen und eine intuitive Lösungen und Beispiele hat. Wir verwenden dies bereits seit einiger Zeit in unserem gesamten Node-Projekt und bisher sind noch keine Probleme aufgetreten.

Hoffe das hilft dir.

+0

Auch wenn dies nicht [eine Link-only-Antwort zu sein scheint, die gelöscht wird] (https://stackoverflow.com/help/deleted-answers), sollten Links zu einem Tool oder einer Bibliothek eine spezifische Erklärung der Verknüpfung enthalten Ressource ist auf das Problem anwendbar und sollte idealerweise [auch von Verwendungshinweisen oder einem Beispielcode begleitet werden] (https://meta.stackoverflow.com/a/251605). "Sehr einfach zu verwenden" ist eine * extrem * minimale Empfehlung. –