node.js — конвертировать PHP CURL в NPM CURL

В настоящее время я пытаюсь сделать запрос CURL, используя узел.

У меня есть следующий запрос CURL в 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);

Мне нужно запустить этот же запрос CURL в узле.
Я пробовал много разных пакетов NPM и остановился на curljs.

У меня есть следующий код: —

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);
});

Я могу получить ответ от сервера без каких-либо ошибок, но он не возвращает никаких данных.
Я получаю следующий ответ:

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

Кто-нибудь сможет помочь с толчком в правильном направлении?

Любая помощь будет принята с благодарностью.

На другой ноте: —

Я также пытался использовать запрос

Вот мой код: —

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);

Но он продолжает возвращать ошибку.

С помощью Узел-выборка также возвращает ту же ошибку: —

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);
});

Версия PHP работает отлично, правильно ли я настраиваю заголовки?

0

Решение

HTTP-запросы запекаются в Node.js. http а также https модули являются одними из основных модулей: они устанавливаются без необходимости делать что-либо еще.

Однако они не совсем просты в использовании. Они не сложные как таковой, но они могут быть проще.

Самая хорошая реализация, на мой взгляд, это fetch API. Это включено в современные веб-браузеры (см MDN). Вы также можете использовать его в Node, установив node-fetch модуль:

npm install node-fetch --save

Затем вы можете позвонить, используя fetch функция. Вы получаете результаты в хорошем, современном стиле ES6, используя Promises.

В твоем случае:

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
});

Вы можете сделать это еще красивее, если хотите использовать современные функции стрелок.

1

Другие решения

обновленный

Я думаю, что вы можете просто использовать запрос.

Пример в вашем сценарии:

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);

Модуль прост в использовании и имеет интуитивно понятные решения и примеры. Мы используем это во всем нашем проекте Node некоторое время, и пока никаких проблем не возникало.

Надеюсь, это поможет вам.

-1