0

我正在尝试与 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 请求?

4

0 回答 0