在 Appcelerator 的 Titanium 中创建一个涉及 webView 和后台调用的 Android 应用程序时,我遇到了一个问题/错误,即 cookie 在多个 createHTTPClient 调用中被损坏。
Cookies 最初是从 webView 获取的:
var webview = Ti.UI.createWebView();
webview.url = 'http://www.example.com';
window.add(webview);
webview.addEventListener('load', function(e) {
cookies = e.source.evalJS("document.cookie");
Titanium.App.Properties.setString('cookies',cookies);
}
window.open({modal:true});
然后与后台调用一起使用:
var loader = Titanium.Network.createHTTPClient();
loader.open("GET",base_url + url);
loader.onload = function() {
// process response
}
loader.setRequestHeader('Cookie',Titanium.App.Properties.getString("cookies"));
loader.send();
第一次调用上述 createHTTPClient 代码块时,一切正常,但上述代码的后续运行将发送损坏的 cookie。在 Google App Engine (gae) 中,打印出请求标头将如下所示(损坏):
logging.info('Request:\n%s' % self.request)
响应中断(仅显示请求标头的 cookie 部分)
Cookie: auth="eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357223709|4f622167f477a8c82cab196af4b0029af1a966d7", auth=eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357225569|7a469fab7a38a437649c25620729e07c4607f617
Cookie2: $Version=1
工作反应
Cookie: auth="eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357223709|4f622167f477a8c82cab196af4b0029af1a966d7"
...
我怀疑这个问题与 unicode 字符或内部的东西有关createHTTPClient
。损坏的 cookie 中显示了两个auth=
语句。
总而言之,当应用程序首次启动时,后台Titanium.Network.createHTTPClient
调用正常工作,之后的任何调用似乎都会发送损坏的 cookie。