我正在尝试与 Microsoft Exchange Server Web 访问门户建立连接。这个想法是我的程序最初打开一个 Web 视图,然后使用 BroadcastReceiver 不断刷新页面。我知道通常情况下,交换基于 Web 的电子邮件访问可以通过协议完成,但无论如何我都在尝试。刷新的时间很好,但问题是虽然我使用 WebView 打开连接,但我正在使用 HttpClient 进行刷新。成功从 WebView 登录到 HttpClient 后,我正在传递 cookie,并打开 SSL 连接,但 Web 服务器正在启动。这在浏览器中运行良好,所以我有点迷路了。
编辑:好的,这是一个更基本的 HTTP 请求问题。所有处理 httpGet 的代码都在构造函数中设置。我什至没有制作新的 HttpClient。现在,这是一个广播接收器,它每 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 请求?