В настоящее время я пытаюсь сделать запрос 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 работает отлично, правильно ли я настраиваю заголовки?
HTTP-запросы запекаются в Node.js. http
а также https
модули являются одними из основных модулей: они устанавливаются без необходимости делать что-либо еще.
Однако они не совсем просты в использовании. Они не сложные как таковой, но они могут быть проще.
Самая хорошая реализация, на мой взгляд, это fetch
API. Это включено в современные веб-браузеры (см MDN). Вы также можете использовать его в Node, установив node-fetch
модуль:
npm install node-fetch --save
Затем вы можете позвонить, используя fetch
функция. Вы получаете результаты в хорошем, современном стиле ES6, используя Promise
s.
В твоем случае:
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
});
Вы можете сделать это еще красивее, если хотите использовать современные функции стрелок.
обновленный
Я думаю, что вы можете просто использовать запрос.
Пример в вашем сценарии:
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 некоторое время, и пока никаких проблем не возникало.
Надеюсь, это поможет вам.