Как получить доступ ко всем заголовкам ответа HTTP - PullRequest
4 голосов
/ 02 февраля 2012

У меня есть простое мобильное приложение в Titanium, которое я использую для отладки возможности входа в нашу систему пользователя.

В данный момент я не вижу заголовка ответа Set-Cookie, так как он всегда возвращается как null.

Я сейчас использую 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.

Я знаю, что там должно быть что-то, потому что в веб-просмотре нормально отображается страница, прошедшая проверку подлинности (вы не сможете попасть туда, если у вас нет авторизации + cookie).

Как я могу получить полный список заголовков, чтобы убедиться, что я получаю все заголовки, которые я должен?

1 Ответ

2 голосов
/ 10 февраля 2012

Я нашел ответ на свой вопрос.

То, что у меня есть в коде, чтобы вернуть все заголовки, верно.Использование HTTPClient.getResponseHeaders() является правильным методом для iOS и HTTPClient.getAllResponseHeaders() для Android (не знаю, почему есть два разных способа - это может быть вопросом для другого дня).

Причина, по которой я не вижу cookieЗаголовок из-за ошибки в Titanium 1.7.5 (и все еще существует в 1.8.1).Это не пересылка на cookie при перенаправлении 302.

Jiras по вопросам:

...