Android SSL httpGet错误500服务器拒绝了该URL

时间:2013-01-14 01:42:23

标签: android ssl webview httpclient

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

0 个答案:

没有答案