HttpClient 在 Android 和 iOS 上的处理方式不同?
HttpClient handled differently on Android and iOS?
我已经 运行 解决这个问题大约 2 天了,我想不出解决它的方法。
我有一项服务可以使用特定的 URL 调用并使用方法 POST 和 'application/x-www-form-urlencoded' 作为数据类型发送一些参数。
此服务将在每次调用时使用时间戳更新数据库 table(如 'last time logged in')。
在 Android 上,我的代码按预期运行,但 运行 在 iOS(模拟器)上它什么都不做......使用 'Charles' 我知道服务是从两个模拟器调用,但我注意到响应在 iOS 上大约需要 60 毫秒,在 Android 上大约需要 10000 毫秒。
这是我用来调用服务的代码:
function updateUserModules(_params) {
if(_params.Number) {
var token = md5HashEncoder(_params.Number + '$XDTPEP132x ');
Ti.API.warn('TOKEN: ' + token);
var httpClient = Ti.Network.createHTTPClient();
httpClient.open("POST", "https://myxd.xdpartners.com/updateUsedModules");
httpClient.setRequestHeader("content-type", "application/x-www-form-urlencoded");
var params = {
token: token,
licenceNumber: _params.Number,
moduleKeyId: "71",
terminalId: "0",
lastUsedDate: moment().format('YYYY-MM-DD HH:mm:ss')
};
httpClient.send(params);
}
}
知道问题出在哪里吗?
我认为您的 SSL 证书有问题。 运行 你的代码调整了一些参数并添加了一个 onerror
处理程序给我这个输出:
[ERROR] : {
[ERROR] : code = "-1202";
[ERROR] : error = "The certificate for this server is invalid. You might be connecting to a server that is pretending to be \U201cmyxd.xdpartners.com\U201d which could put your confidential information at risk.";
[ERROR] : source = "[object TiNetworkHTTPClient]";
[ERROR] : success = 0;
[ERROR] : type = error;
[ERROR] : }
Android >5 在某些情况下更宽容,这可以解释为什么它在那里起作用。
尝试 httpClient.send(JSON.stringify(params));
而不是 httpClient.send(params);
当我遇到与您相同的问题时,这在我的项目中修复了它。
我已经 运行 解决这个问题大约 2 天了,我想不出解决它的方法。 我有一项服务可以使用特定的 URL 调用并使用方法 POST 和 'application/x-www-form-urlencoded' 作为数据类型发送一些参数。
此服务将在每次调用时使用时间戳更新数据库 table(如 'last time logged in')。
在 Android 上,我的代码按预期运行,但 运行 在 iOS(模拟器)上它什么都不做......使用 'Charles' 我知道服务是从两个模拟器调用,但我注意到响应在 iOS 上大约需要 60 毫秒,在 Android 上大约需要 10000 毫秒。
这是我用来调用服务的代码:
function updateUserModules(_params) {
if(_params.Number) {
var token = md5HashEncoder(_params.Number + '$XDTPEP132x ');
Ti.API.warn('TOKEN: ' + token);
var httpClient = Ti.Network.createHTTPClient();
httpClient.open("POST", "https://myxd.xdpartners.com/updateUsedModules");
httpClient.setRequestHeader("content-type", "application/x-www-form-urlencoded");
var params = {
token: token,
licenceNumber: _params.Number,
moduleKeyId: "71",
terminalId: "0",
lastUsedDate: moment().format('YYYY-MM-DD HH:mm:ss')
};
httpClient.send(params);
}
}
知道问题出在哪里吗?
我认为您的 SSL 证书有问题。 运行 你的代码调整了一些参数并添加了一个 onerror
处理程序给我这个输出:
[ERROR] : {
[ERROR] : code = "-1202";
[ERROR] : error = "The certificate for this server is invalid. You might be connecting to a server that is pretending to be \U201cmyxd.xdpartners.com\U201d which could put your confidential information at risk.";
[ERROR] : source = "[object TiNetworkHTTPClient]";
[ERROR] : success = 0;
[ERROR] : type = error;
[ERROR] : }
Android >5 在某些情况下更宽容,这可以解释为什么它在那里起作用。
尝试 httpClient.send(JSON.stringify(params));
而不是 httpClient.send(params);
当我遇到与您相同的问题时,这在我的项目中修复了它。