O HttpPost funciona no projeto Java, não no Android

Escrevi um código para o meu dispositivo Android para acessar um site na Webhttps e analise alguns dados das páginas resultantes. AHttpGet acontece primeiro para obter algumas informações necessárias para o login e, em seguida, umHttpPost para fazer o processo de login real.

O código abaixo funciona muito bem em um projeto Java no Eclipse que possui os seguintes arquivos Jar no caminho da construção:httpcore-4.1-beta2.jar, httpclient-4.1-alpha2.jar, httpmime-4.1-alpha2.jar, commons-logging-1.1.1.jar.

public static MyBean gatherData(String username, String password) {
    MyBean myBean = new MyBean();
    try {
        HttpResponse response = doHttpGet(URL_PAGE_LOGIN, null, null);
        System.out.println("Got login page");
        String content = EntityUtils.toString(response.getEntity());
        String token = ContentParser.getToken(content);
        String cookie = getCookie(response);
        System.out.println("Performing login");
        System.out.println("token = "+token +" || cookie = "+cookie);
        response = doLoginPost(username,password,cookie, token);
        int respCode = response.getStatusLine().getStatusCode();
        if (respCode != 302) {
            System.out.println("ERROR: not a 302 redirect!: code is \""+ respCode+"\"");
            if (respCode == 200) {
                System.out.println(getHeaders(response));
                System.out.println(EntityUtils.toString(response.getEntity()).substring(0, 500));
            }
        } else {
            System.out.println("Logged in OK, loading account home");
            // redirect handler and rest of parse removed
        }
    }catch (Exception e) {
        System.out.println("ERROR in gatherdata: "+e.toString());
        e.printStackTrace();
    }
    return myBean;
}
private static HttpResponse doHttpGet(String url, String cookie, String referrer) {
    try {
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");
        HttpGet httpGet = new HttpGet(url);
        httpGet.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        httpGet.setHeader(HEADER_USER_AGENT,HEADER_USER_AGENT_VALUE);
        if (referrer != null && !referrer.equals("")) httpGet.setHeader(HEADER_REFERER,referrer);
        if (cookie != null && !cookie.equals("")) httpGet.setHeader(HEADER_COOKIE,cookie);
        return client.execute(httpGet);
    } catch (Exception e) {
        e.printStackTrace();
        throw new ConnectException("Failed to read content from response");
    }
}
private static HttpResponse doLoginPost(String username, String password, String cookie, String token) throws ClientProtocolException, IOException {
    try {
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");
        HttpPost post = new HttpPost(URL_LOGIN_SUBMIT);
        post.getParams().setParamete,r(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        post.setHeader(HEADER_USER_AGENT,HEADER_USER_AGENT_VALUE);
        post.setHeader(HEADER_REFERER, URL_PAGE_LOGIN);
        post.setHeader(HEADER_COOKIE, cookie);
        post.setHeader("Content-Type","application/x-www-form-urlencoded");
        List<NameValuePair> formParams = new ArrayList<NameValuePair>();
        formParams.add(new BasicNameValuePair("org.apache.struts.taglib.html.TOKEN", token));
        formParams.add(new BasicNameValuePair("showLogin", "true"));
        formParams.add(new BasicNameValuePair("upgrade", ""));
        formParams.add(new BasicNameValuePair("username", username));
        formParams.add(new BasicNameValuePair("password", password));
        formParams.add(new BasicNameValuePair("submit", "Secure+Log+in"));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams,HTTP.UTF_8);
        post.setEntity(entity);
        return client.execute(post);
    } catch (Exception e) {
        e.printStackTrace();
        throw new ConnectException("ERROR in doLoginPost(): "+e.getMessage());
    }
}

O servidor (que não está sob meu controle) retorna um redirecionamento 302 quando o logon foi bem-sucedido e 200 se falhar e recarrega a página de logon. Quando executado com os arquivos Jar acima, recebo o redirecionamento 302, no entanto, se executar exatamente o mesmo código de um projeto Android com o arquivo Jar Android 1.6 no caminho de construção, recebo a resposta 200 do servidor. Recebo a mesma resposta 200 ao executar o código no meu dispositivo 2.2.

Meu aplicativo para Android tem permissões de internet e o HttpGet funciona bem. Estou assumindo que o problema está no fato de o HttpPost (ou alguma outra classe) ser diferente de alguma maneira significativa entre a versão do Android Jar e as versões mais recentes do Apache.

Eu tentei adicionar as bibliotecas Apache ao caminho de construção do projeto Android, mas devido às classes duplicadas, recebo mensagens como:INFO/dalvikvm(390): DexOpt: not resolving ambiguous class 'Lorg/apache/http/impl/client/DefaultHttpClient;' no log. Eu também tentei usar umMultipartEntity ao invés deUrlEncodedFormEntity mas eu recebo o mesmo resultado de 200.

Então, eu tenho algumas perguntas:
- Posso forçar o código em execução no Android a usar as bibliotecas mais recentes do Apache, de preferência às versões do Android?
- Caso contrário, alguém tem alguma idéia de como alterar meu código para que ele funcione com o Android Jar?
- Existem outras abordagens totalmente diferentes para fazer um HttpPost no Android?
- Mais alguma ideia?

Eu tenholer a muitos do Postagens ecódigo mas não estou chegando a lugar nenhum. Estou preso nisso há alguns dias e não sei como fazer a coisa funcionar, então tentarei qualquer coisa neste momento. Desde já, obrigado.

questionAnswers(4)

yourAnswerToTheQuestion