[英]Using DefaultHttpClient between Activities
我有一个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;
}
并确实在同一活动内的页面上登录。
开始其他活动后,我保存了它的cookie:
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));
}
由于某种原因,他不再登录。
有人可以帮我解决这个问题吗?
根据您的代码,很明显,通过调用clientWithoutCertificateCheck()总是返回一个新创建的httpClient,而不是与上一个活动相同的httpClient。 因此,在服务器端,它可能认为这些是不同的传入连接,并且与不同的会话/ cookie相关联。
活动的生命周期是相当短暂的,通常在应用程序运行期间会多次创建/销毁它。 从我的角度来看,将httpClient绑定到Activity是不合理的。 如果要保留/使用单个httpClient实例跨活动,请考虑使用服务,将与HTTP相关的内容实现/集中到HttpService中,并为需要使用http服务的所有活动启动/绑定服务。 希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.