我正在尝试与Microsoft Exchange服务器Web访问门户建立连接。我的想法是我的程序最初打开一个Web视图,然后使用BroadcastReceiver不断刷新页面。我知道通常,交换基于Web的电子邮件访问可以通过协议完成,但我无论如何都在尝试。刷新的时机工作正常,但问题是虽然我用WebView打开连接,然后我用HttpClient进行刷新。我成功通过WebView登录到HttpClient后传递cookie,并打开SSL连接,但Web服务器正在回击。这在浏览器中工作正常,所以我有点迷失。
编辑:好的,这是一个更基本的HTTP请求问题。所有处理httpGet的代码都在构造函数中设置。我甚至没有制作新的HttpClient。现在,这是一个BroadcastReceiver,它每60秒响应一次定时消息来发出请求,但每次代码完成时,线程似乎都会死掉,每次定时器关闭时,都会调用空白构造函数。在编写像这样的http GET请求时,我是否需要每次都重新创建HttpClient?或者我使用静态变量来保持它们的价值是一种好的方式吗? URL和cookie从一次呼叫到下一次呼叫都存在。我还缺少什么?第一次调用这个东西似乎也不起作用,所以我仍然认为我做错了SSL。同样,这个网站在网络浏览器中运行得很好,所以我没有正确地模拟请求。
这是构造函数代码:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// RESTORE THE COOKIES!!!
cookieJar = new BasicCookieStore();
localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieJar);
cookie = extras.getString("cookies");
String[] cookieCutter = cookie.split(";");
for (int i=0; i < cookieCutter.length; i++)
{
String[] values = cookieCutter[i].split("=");
BasicClientCookie c = new BasicClientCookie(values[0], values[1]);
c.setDomain(MAIL_WEB_SERVER);
cookieJar.addCookie((Cookie)c);
}
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
// Create local HTTP context
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", socketFactory, 443));
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(params, registry);
httpClient = new DefaultHttpClient(mgr, params);
httpClient.setCookieStore(cookieJar);
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
这是刷新代码:
BasicCookieStore cookies = (BasicCookieStore)localContext.getAttribute(ClientContext.COOKIE_STORE);
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet, localContext);
那么这会让我离开?我收到错误代码:500内部服务器错误。服务器拒绝指定的统一资源定位符(URL)。联系服务器管理员。 (12202)
我正在移动cookie,并接受所有证书......还有来自浏览器会话的其他内容还有SSL连接以及我需要传递给httpGet请求的登录吗?