IOS中调用rest服务无捕获HTTP响应代码401
我在通过iOS调用rest服务时遇到了麻烦,因为在Android中,一切都正常。当我通过登录名和密码进行呼叫时,服务器返回状态IOS中调用rest服务无捕获HTTP响应代码401,ios,iphone,rest,http,ionic3,Ios,Iphone,Rest,Http,Ionic3,我在通过iOS调用rest服务时遇到了麻烦,因为在Android中,一切都正常。当我通过登录名和密码进行呼叫时,服务器返回状态401(通过邮递员/安卓/爱奥尼亚服务),现在,当我通过iOS进行呼叫时,它不会返回任何内容(我将一个日志放在服务器上,它标识并显示返回的内容)它不会在subscribe中接收任何类似return的内容,也不会在http.get的catch中接收任何类似return的内容,因此我无法捕获错误并进行处理 总结API的调用是由iOS进行的,但当订阅中的错误不在捕获范围内时,返
401
(通过邮递员/安卓/爱奥尼亚服务),现在,当我通过iOS进行呼叫时,它不会返回任何内容(我将一个日志放在服务器上,它标识并显示返回的内容)它不会在subscribe中接收任何类似return的内容,也不会在http.get的catch中接收任何类似return的内容,因此我无法捕获错误并进行处理
总结API的调用是由iOS进行的,但当订阅中的错误不在捕获范围内时,返回401。但是,当我没有Internet时,它会处于“捕捉声音”状态0
IOS中的响应(失败)不返回捕获:
在控制台xCode上打印时出错:
CredStore - performQuery - Error copying matching creds. Error=-25300,
query={
class = inet;
"m_Limit" = "m_LimitAll";
ptcl = htps;
"r_Attributes" = 1;
sdmn = "api.site.com.br";
srvr = "api.site.com.br";
sync = syna;
}
android(OK)返回捕获中的响应:
过程:
我在rest中调用API,作为类型GET,并在base64授权中作为参数传递登录名和密码。
当我发送正确的登录名和密码时,它将返回状态200
,并带有有效的令牌。但是当发送了无效的登录名和密码时,服务器返回状态401
(这没问题,我做了邮递员测试)
包装:
"@angular/common": "4.1.2",
"@angular/compiler": "4.1.2",
"@angular/compiler-cli": "4.1.2",
"@angular/core": "4.1.2",
"@angular/forms": "4.1.2",
"@angular/http": "4.1.2",
"@angular/platform-browser": "4.1.2",
"@angular/platform-browser-dynamic": "4.1.2",
"@ionic-native/core": "3.7.0",
"@ionic-native/in-app-browser": "^3.10.3",
"@ionic-native/onesignal": "^4.3.0",
"@ionic-native/splash-screen": "3.7.0",
"@ionic-native/status-bar": "3.7.0",
"@ionic/storage": "2.0.1",
"cordova-android": "^6.2.3",
"cordova-ios": "^4.4.0",
"cordova-plugin-console": "^1.0.7",
"cordova-plugin-device": "^1.1.6",
"cordova-plugin-inappbrowser": "^1.7.1",
"cordova-plugin-splashscreen": "^4.0.3",
"cordova-plugin-statusbar": "^2.2.3",
"cordova-plugin-whitelist": "^1.3.2",
"ionic-angular": "3.3.0",
"ionic-plugin-keyboard": "^2.2.1",
"ionicons": "3.0.0",
"onesignal-cordova-plugin": "^2.2.1",
"rxjs": "5.1.1",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.10"
代码:
getToken(登录,senha):承诺{
返回新承诺((解决、拒绝)=>{
让选项=新的请求选项({
标题:新标题({
“授权”:“基本”+btoa(登录+”:“+senha),
“缓存控制”:“无缓存”
})
});
这是http.get(“https://subdominio.site.com.br/api/login“,选项)
.map(res=>res.json())
.订阅(数据=>{
控制台错误(“订阅确定->”+数据);
解析(数据);
},错误=>{
console.error(“订阅错误->”+错误);
拒绝(错误);
});
});
}
爱奥尼亚信息:
有人遇到过这个问题吗?我也遇到过类似的问题,似乎无法解决。到目前为止,你找到了解决方案吗?嗨,问题已经解决了,我必须添加以下插件,并用它制作“useBasicAuth”火焰。我的问题是,iOS连接线中有一个bug,很久以前就存在,没有人能解决它。发生这种情况是因为我正在调用基本类型的身份验证服务,并且在该服务的标题中返回
getToken(login, senha): Promise<{}> {
return new Promise((resolve, reject) => {
let options = new RequestOptions({
headers: new Headers({
'Authorization': 'Basic ' + btoa(login + ":" + senha),
"cache-control": "no-cache"
})
});
this.http.get("https://subdominio.site.com.br/api/login", options)
.map(res => res.json())
.subscribe(data => {
console.error("Subscribe OK -> " + data);
resolve(data);
}, error => {
console.error("Subscribe error ->" + error);
reject(error);
});
});
}