Выполнить запрос curl в javascript?

Можно ли отправить запрос curl в jQuery или javascript?

Что-то вроде этого:

curl \
-H 'Authorization: Bearer 6Q************' \
'https://api.wit.ai/message?v=20140826&q='

Итак, в PHP при отправке формы, например:

$header = array('Authorization: Bearer 6Q************');
$ch = curl_init("https://api.wit.ai/message?q=".urlEncode($_GET['input']));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch);
curl_close($ch);

То, что я пытаюсь сделать, это выполнить этот запрос curl, который возвращает json, а затем я планирую разбор его с помощью функции jQuery $.get().

Ответ 1

curl - это команда (в Linux). Curl обычно делает HTTP-запрос.

Что вы действительно хотите сделать, это сделать HTTP (или XHR) запрос из JavaScript.

Используя этот словарь, вы найдете несколько примеров: отправка заголовков авторизации с помощью jquery и ajax

По сути, вы захотите вызвать $.ajax с несколькими опциями для заголовка и т.д.

$.ajax({
        url: 'https://api.wit.ai/message?v=20140826&q=',
        beforeSend: function(xhr) {
             xhr.setRequestHeader("Authorization", "Bearer 6QXNMEMFHNY4FJ5ELNFMP5KRW52WFXN5")
        }, success: function(data){
            alert(data);
            //process the JSON data etc
        }
})

Ответ 2

Да, используйте getJSONP. Это единственный способ сделать асинхронные вызовы перекрестных доменов/серверов. (* Или это будет в ближайшем будущем). Что-то вроде

$.getJSON('your-api-url/validate.php?'+$(this).serialize+'callback=?', function(data){
if(data)console.log(data);
});

Параметр обратного вызова будет автоматически заполняться браузером, поэтому не беспокойтесь.

На стороне сервера ('validate.php') у вас будет что-то вроде этого

<?php
if(isset($_GET))
{
//if condition is met
echo $_GET['callback'] . '(' . "{'message' : 'success', 'userID':'69', 'serial' : 'XYZ99UAUGDVD&orwhatever'}". ')';
}
else echo json_encode(array('error'=>'failed'));
?>

Ответ 3

Вы можете использовать JavaScripts Fetch API (доступно в вашем браузере) для отправки сетевых запросов.

Если вы используете узел, вам нужно установить пакет node-fetch.

const url = "https://api.wit.ai/message?v=20140826&q=";

const options = {
  headers: {
    Authorization: "Bearer 6Q************"
  }
};

fetch(url, options)
  .then( res => res.json() )
  .then( data => console.log(data) );