1

我们有什么办法可以准确地找出 HTTP 连接超时状态码吗?HTTP 连接超时和错误的请求 url 都给出响应代码 0。有没有办法唯一地识别连接超时?

 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 的情况下没有发生。

4

1 回答 1

0

在 Android 中,有两种情况需要考虑超时。观察到 2 种错误,

在日志中,案例 1:

TiHTTPClient: (TiHttpClient-9) [7700,93840] HTTP 错误 (java.net.SocketTimeoutException): timeout [ERROR] : TiHTTPClient: java.net.SocketTimeoutException: timeout

alert('e.error:' + e.error + ':status:' + xhr.status); 输出为

e.错误:超时:状态:0 ...

案例 2:TiHTTPClient: (TiHttpClient-14) [53148,203910] HTTP 错误 (java.net.SocketTimeoutException): SSL 握手超时 [ERROR] : TiHTTPClient: java.net.SocketTimeoutException: SSL 握手超时

alert('e.error:' + e.error + ':status:' + xhr.status); 输出为

e.error:SSL 握手超时:状态:0

所以通过检查,

((e.error).toLowerCase() == "超时" || (e.error).toLowerCase() == "sslhandshake 超时"),

我们可以捕获超时场景并相应地显示正确的消息。

于 2018-04-10T09:42:51.417 回答