这个answer在很大程度上帮助了我,但还没有完全解决我的问题。我使用的代码类似于:
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);
}
});
}
基本上,我不需要发布网址,而是因为身份验证而需要发布curl。
该示例适用于简单的url,但我想要用于'the_url'的是:
var the_url = 'curl -u username:password "http://www.myurl.com/api/get"';
这就是我遇到问题的地方,这意味着永远不会达成成功陈述。
解决此问题的最佳方法是什么,如果无法实现,有人会推荐最佳解决方法吗?
提前致谢。
答案 0 :(得分: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 :(得分:3)
如果您使用的是简单的AJAX,那么您可以在AJAX调用开始时添加自定义(基本身份验证)标头。但是您使用的是JSONP,实际上相当于在您的HTML中添加<script>
标记。
所以您要问的是:我可以使用<script>
代码进行基本身份验证吗?不,你不能。
唯一可能的做法就是进行服务器端处理,就像Matt Gibson建议的那样。
但请注意,浏览器应在JSONP请求后触发身份验证对话框(另请参阅this answer)。它不适用于你的情况吗?
答案 2 :(得分:2)
更新您的jquery ajax电话以包含用于HTTP身份验证的username
和passward
选项,请参阅文档中的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.
更新正如评论中指出的那样,HTTP身份验证只是doesn't work with JSONP,正如提问者所使用的那样(没有看到,我的不好)。 无论如何我都会在这里留下这个答案让其他人发现不使用JSONP。