1

这个答案在很大程度上帮助了我,但并没有完全解决我的问题。我正在使用与此类似的代码,即:

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。

该示例适用于简单的 url,但我想要用于 'the_url' 的是:

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

这是我遇到问题的地方,这意味着永远无法达到成功声明。

解决此问题的最佳方法是什么,如果无法实现,有人可以推荐最佳解决方法吗?

提前致谢。

4

3 回答 3

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;
于 2012-07-03T14:23:01.540 回答
3

如果您使用的是简单的 AJAX,那么您可以在 AJAX 调用开始时添加自定义(基本身份验证)标头。但是您使用的是 JSONP,这实际上相当于<script>在您的 HTML 中添加标签。

所以您要问的是:我可以使用<script>标签进行基本身份验证吗?不,你不能。

留给您的唯一可能性是像 Matt Gibson 建议的那样进行服务器端处理。

但是请注意,浏览器应在 JSONP 请求之后触发身份验证对话框(另请参阅此答案)。它在你的情况下不起作用吗?

于 2012-07-03T14:26:52.277 回答
2

更新您的jquery ajax调用以包含HTTP 身份验证的username和选项,请参阅文档中的高级选项passward

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 身份验证根本不适用于 JSONP,因为提问者使用了(没看到,我的错)。无论如何,我都会把这个答案留在这里,让其他人找到不使用 JSONP 的。

于 2012-07-03T14:24:21.460 回答