我有一个phonegap应用程序。我查询需要 HTTP 基本身份验证的 REST Web 服务
这是我的代码:
var username = 'test';
var pass = 'test';
var string = username+':'+pass;
var hash = btoa(string);
$.ajax({
type: 'GET',
dataType: 'jsonp',
crossdomain: true,
//tried this
beforeSend: function (xhr){
xhr.setRequestHeader('Authorization', make_base_auth(username, pass));
},
//also this
username: 'test',
password: 'test',
//also this
data: {username: 'test', password: 'test'},
//and this
url: 'http://'+username+':'+pass+'@testserver.local/ProductService/getProductList.json?testQuery&_jsonp=availableProducts',
error: function (xhr, ajaxOptions, thrownError) {
console.warn(xhr.status);
console.warn(thrownError);
alert(xhr.status);
alert(thrownError);
}
});
function make_base_auth(user, password) {
var tok = user + ':' + password;
var hash = btoa(tok);
alert("HASH: "+hash);
return "Basic " + hash;
}
我从服务器端所知道的是,当我从 Android 4.x 查询时,apache 说“用户试图在没有凭据的情况下登录”。所以似乎没有数据到达服务器,但为什么呢?
奇怪的是,它适用于 iPhone (iOS 4.1) 和 Android 版本 2.2 和 2.3,但不适用于 4.x(4.0.4 和 4.1)。任何人都有任何提示,这让我发疯。
编辑:我能够查看 apache 访问日志,它在 Android 4.x 的每个请求上返回 401,在 2.2 和 2.3 之前的每个请求上返回 200。我现在将记录所有 HTTP 请求标头以检查到达的内容。