我们是否有任何选项可以准确找出HTTP连接超时状态代码? HTTP连接timedout和错误的请求url BOTH给出响应代码0.有没有办法唯一地识别连接timedout?
var self = Ti.UI.createWindow({
backgroundColor : '#ffffff'
});
var url = 'https://www.google.com';
if (Ti.Network.online) {
var xhr = Ti.Network.createHTTPClient({
timeout : 1000,
validatesSecureCertificate : false
});
xhr.onload = function(e) {
alert('onload:');
};
xhr.onerror = function(e) {
alert('e.error:' + e.error + ':status:' + xhr.status);
};
xhr.open('GET', url);
xhr.send(); }
self.open();
以上代码在iphone的情况下将TimedOut状态代码设为0,而不是像408.但是在Android的情况下TimedOut没有发生。
答案 0 :(得分:0)
在Android中,有两种情况需要考虑超时。观察到2种类型的错误,
在日志中 案例1:
TiHTTPClient:(TiHttpClient-9)[7700,93840] HTTP错误 (java.net.SocketTimeoutException):timeout [ERROR]:TiHTTPClient: java.net.SocketTimeoutException:timeout
警告(' e.error:' + e.error +':状态:' + xhr.status);输出为
e.error:timeout:status:0 ...
案例2: TiHTTPClient:(TiHttpClient-14)[53148,203910] HTTP错误(java.net.SocketTimeoutException):SSL握手超时 [错误]:TiHTTPClient:java.net.SocketTimeoutException:SSL握手超时
我们可以 捕获超时情况并相应地显示正确的消息。警告(' e.error:' + e.error +':状态:' + xhr.status);输出为
e.error:SSL握手超时:状态:0
所以通过检查,
((e.error).toLowerCase()==" timeout" ||(e.error).toLowerCase()== " sslhandshake超时"),