2017-01-20 13 views
0

В настоящее время я пытаюсь сделать запрос CURL с помощью узла.Преобразование PHP CURL в NPM 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 

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

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

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

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

Вот мой код: -

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

Но он держит возвращается ошибка.

Использование node-fetch также возвращает ту же ошибку: -

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

Я перешел с PHP на узел. Одна из лучших вещей в Node - это возможность делать HTTP-запросы. Вам нужно использовать CURL? Я подозреваю, что ваша задача будет лучше выполнена с помощью библиотеки типа RequestJS. Я никогда не хочу curl_setopt снова :) –

+0

Я пытаюсь вернуть JSON из запроса API. Можете ли вы предоставить пример с помощью RequestJS? Я не настроен на использование curljs, просто показалось лучшим из пакетов, которые я мог найти. –

+1

Есть много способов получить JSON. Мой любимый выбор. Просто используйте его, как в браузере. npm install node-fetch. Затем «fetch» ​​(«http://www.website.com»). Then (res => res.json()), затем (res => // do something) '. Если вам нужны заголовки полномочий, это тоже можно сделать. RequestJS тоже может это сделать. Просто зависит от ваших предпочтений. Я использовал оба. –

ответ

0

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

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

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

npm install node-fetch --save 

Вы можете сделать свой вызов с помощью функции fetch. Вы получаете результаты в хорошем, современном стиле ES6-ish, используя 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 
}); 

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

+0

Это все еще возвращает 404, странно, как PHP-версия моего скрипта вытягивает контент из API, но независимо от того, что я пытался с узлом, я продолжаю получать 404. –

+0

@TonyHensler Некоторые API-интерфейсы, такие как отличный набор «User-Agent»: вы можете попробовать это. Но это очень жесткое кодирование против ресурса, когда вы не знаете, что это такое! – lonesomeday

+0

Я попытался разместить в нем User-Agent, но он все равно возвращает тот же результат. Это очень неприятно, как он отлично работает в PHP, но я не могу получить ответ с помощью узла. –

-1

Обновлено

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

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

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 некоторое время, и до сих пор не возникало никаких проблем.

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

+0

Хотя это не похоже на [ответ только для ссылок, который будет удален] (https://stackoverflow.com/help/deleted-answers), ссылки на инструмент или библиотеку должны содержать конкретное объяснение того, как связанный ресурс применим к проблеме, и в идеале [также должны сопровождаться примечаниями об использовании или некоторым примером кода) (https://meta.stackoverflow.com/a/251605). «Очень простая в использовании» - это минимальная рекомендация *. –