2012-07-03 4 views
1

Этот answer помог мне в значительной степени, но не полностью разрешил мои проблемы. Я использую код, аналогичный, который:Использование ajax для запроса завитка

function getResponse() { 

    var the_url = "http://www.myurl.com/api/get"; 

    $.ajax({ 
     url: the_url, 
     dataType: 'jsonp', 
     type: 'get', 
     success: function(data) { 
     var json_response = data; 
     alert(data); 
     } 
    }); 
} 

В принципе, вместо того, чтобы просто размещение URL Мне нужно отправить локон из-за проверки подлинности.

примера отлично работает с простым URL, но то, что я хотел использовать для «the_url» заключается в следующем:

var the_url = 'curl -u username:password "http://www.myurl.com/api/get"'; 

Это где я имею вопросы, что означает заявление успеха никогда не достигается.

Каков наилучший способ решить эту проблему, и если это невозможно, кто-то может рекомендовать лучшее обходное решение?

Заранее спасибо.

ответ

3

Если вы использовали простой AJAX, вы могли бы просто добавить пользовательский заголовок (базовая аутентификация) в начале вашего вызова AJAX. Но вы используете JSONP, что на самом деле эквивалентно добавлению тега <script> в ваш HTML.

Так что вы спрашиваете: могу ли я выполнить базовую проверку подлинности с помощью метки <script>? Нет, ты не можешь.

Единственная возможность, оставленная для вас, - это обработать на стороне сервера, как предположил Мэтт Гибсон.

Обратите внимание, что браузер должен запустить диалоговое окно проверки подлинности после запроса JSONP (см. Также this answer). Разве это не работает в вашем случае?

+0

Да, если я не предоставил свойства имени пользователя и пароля, то это ошибки. К сожалению, это бесполезно! – ThePower

+0

@ ThePower Я вижу, поэтому единственная возможность для вас - реализовать серверную сторону, поэтому она будет срабатывать «завиток» (см. Ответ Мэтта Гибсона). – freakish

3

Вам нужна страница вашего сервера, на которой указывает JavaScript, в которой есть команда curl. Вы не можете просто запускать cURL напрямую в качестве URL-адреса.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $the_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 
1

Update ваш jquery ajax вызов включить username и passward варианты аутентификации HTTP см Advanced options в документации:

If the server performs HTTP authentication before providing a response, 
the user name and password pair can be sent via the username 
and password options. 

Update как указано в комментариях, HTTP-аутентификация просто doesn't work with JSONP, поскольку вопросник использовался (не видел этого, я плохой). Я оставлю этот ответ здесь в любом случае, чтобы другие люди нашли, что не используют JSONP.

+1

-1: не будет работать с JSONP. – freakish

+0

Я не думаю, что эмулирует один и тот же метод, я не получаю 401 (UNAUTHORIZED) из jquery – ThePower

Смежные вопросы