Использование DefaultHttpClient между операциями - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть DefaultHttpClient, который не проверяет сертификаты, которые я использую в обеих операциях:

public function clientWithoutCertificateCheck() {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    try{
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
        httpClient = new DefaultHttpClient(ccm, params);
    } catch (Exception e) { }

    return httpClient;
}

и он входит на страницу внутри этой же активности.

После запуска другого действия я сохраняю его куки:

CookieSyncManager.createInstance(this);
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for(Cookie cookie : cookies)
{
    String cookieString = cookie.getName() + "=" + cookie.getValue() + "; domain=" + cookie.getDomain();                        
    CookieManager.getInstance().setCookie(cookie.getDomain(), cookieString);  
}

Тогда я пытаюсь получить тот же httpClient на другой активности.

DefaultHttpClient httpClient = clientWithoutCertificateCheck();
String url = "https://academicos.unilasalle.edu.br/";
String[] keyValueSets = CookieManager.getInstance().getCookie(url).split(";");
for(String cookie : keyValueSets)
{
    String[] keyValue = cookie.split("=");
    String key = keyValue[0];
    String value = "";
    if(keyValue.length>1) value = keyValue[1];
    httpClient.getCookieStore().addCookie(new BasicClientCookie(key, value));
}

и по какой-то причине он больше не вошел в систему.

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 22 ноября 2011

Согласно вашему коду, очевидно, что при вызове clientWithoutCertificateCheck () всегда возвращается вновь созданный httpClient, а не тот же, что и в предыдущем действии. Поэтому на стороне сервера может возникнуть впечатление, что это разные входящие соединения и они связаны с разными сеансами / файлами cookie.

Жизненный цикл активности довольно преходящий, обычно он создается / уничтожается много раз во время работы приложения. С моей точки зрения, связывать httpClient с Activity нецелесообразно. Если вы хотите сохранить / использовать один экземпляр httpClient для перекрестных действий, рассмотрите возможность использования службы, внедрите / централизуйте ваши связанные с http вещи в HttpService и запустите / связывайте службу для всех действий, которые требуют использования службы http. надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...