2012-02-02 7 views
4

私はユーザーシステムにログインする機能をデバッグするために使用しているシンプルなモバイルアプリをTitaniumに持っています。すべてのHTTPレスポンスヘッダーにアクセスする方法

現時点では、nullとして返されるため、現時点ではSet-Cookieレスポンスヘッダーが表示されていないようです。

私は現在、Titanium SDK 1.7.5を使用しています(1.8はひどく壊れています)。

私のコードは非常に単純で、HTTPClientを使用してのテキストブックの例:

var loginReq = Titanium.Network.createHTTPClient(); 
var url = 'https://auth.csu.edu.au/login/login.pl'; 
var targetURL = 'http://my.csu.edu.au' 

loginButton.addEventListener('click',function(e) 
{ 
    if (username.value != '' && password.value != '') 
    { 
     loginReq.open('POST', url); 

     Ti.API.info('Sending HTTP Request.'); 

     var params = { 
      username: username.value, 
      password: password.value, 
      url: targetURL 
     } 

     loginReq.send(params); 
    } 
    else { 
     alert("Username/Password are required"); 
    } 
}); 

loginReq.onload = function() { 
    var cookie = loginReq.getResponseHeader('Set-Cookie'); 
    Ti.API.info('Response Status: ' + loginReq.status); 
    Ti.API.info('Response Header - Cookie: ' + cookie); 
    Ti.API.info('Response Header - Location: ' + loginReq.getLocation()); 

    if (Ti.Platform.osname !== 'android') 
     Ti.API.info('Headers: ' + JSON.stringify(loginReq.getResponseHeaders())); 

    var f = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,'test.html'); 
    f.write(this.responseText); 

    var webview = Ti.UI.createWebView(); 
    webview.url = f.nativePath; 

    var newWindow = Ti.UI.createWindow(); 
    newWindow.add(webview); 
    newWindow.open({modal:true}); 
}; 

出力は以下のとおりであるが:私はちょうどとしての円の周りと周りつもり

[INFO] Sending HTTP Request. 
[INFO] Response Status: 200 
[INFO] Response Header - Cookie: null 
[INFO] Response Header - Location: https://auth.csu.edu.au/login/login.pl?redirect=true&url=http%3a%2f%2fmy%2ecsu%2eedu%2eau 
[INFO] Headers: {"Connection":"Keep-Alive","Transfer-Encoding":"Identity","Keep-Alive":"timeout=5, max=99","Content-Type":"text/html","Server":"Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.7d mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.8.4","Date":"Thu, 02 Feb 2012 01:45:29 GMT"} 

ここで何が間違っているのか分かりません。私に混乱を招くのは、HTTPClient.getResponseHeaders()も文書化されていないことです(Titanium.Network.HTTPClient-object.html) - Androidでは動作しません。

webviewに認証済みのページが表示されるため、そこに何かがあるはずです(あなたが認証されていない限り、そこにはアクセスできません)。

ヘッダーの完全なリストを取得して、私が想定しているすべてのヘッダーを取得していることを確認するにはどうすればよいですか?

答えて

2

私自身の質問に対する答えが見つかりました。

すべてのヘッダーを返すために私のコードで持っているものは正しいです。 HTTPClient.getResponseHeaders()を使用すると、iOSの正しい方法とAndroidのHTTPClient.getAllResponseHeaders()(2つの異なる方法がある理由はわかりません。別の日の質問になる可能性があります)。

なぜ私がクッキーヘッダーを見ていないのは、Titanium 1.7.5のバグのためです(まだ1.8.1にあります)。 302リダイレクトのCookieに転送していません。問題に関する

Jiras:

+1

は...そんなに、ありがとうございました。私はノートパソコンを窓から出そうとしていましたが、これははるかに良い解決策です。 – pancake

関連する問題