android / java提交表单发布https cookie

时间:2012-05-22 06:41:22

标签: android forms post cookies https

我需要一些帮助。我正在开发一个需要以https html格式登录的Android应用程序。几天前,表单不是https,但http和我的代码是:

String sessionId = "";
    int TIMEOUT_MS = 10000; //10 segundos hasta la conexion

    //El POST
    HttpClient httpClient = new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), TIMEOUT_MS);
    HttpConnectionParams.setSoTimeout(httpClient.getParams(), TIMEOUT_MS);
    //httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
    try {
    HttpPost httpPost = new HttpPost("http://" + servidor + ".pucp.edu.pe/login");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);  
            nameValuePairs.add(new BasicNameValuePair("username", usuarioTxt));  
            nameValuePairs.add(new BasicNameValuePair("password", contrasenaTxt));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        //POST request
        HttpResponse response = httpClient.execute(httpPost);
        //Obtenerlo en String
        sessionId = inputStreamToString(response.getEntity().getContent()).toString();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        //si no se llega a obtener la conexión
        //e.printStackTrace();
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setMessage(getResources().getString(R.string.errorDescarga));
        alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int which) {
               }
            });
        alertDialog.show();
    }

return sessionId;

基于stackoverflow上的一些帖子。

现在,使用https表单,我遇到了一些问题。首先,每次要登录时,服务器都会生成一个“执行代码”,因此我可以从一个简单的html文件中登录:

<html>
<form id="fm1" name="form" method="post" action="https://pandora.pucp.edu.pe/pucp/login?TARGET=http://eros.pucp.edu.pe/" >
<input type="text" name="username" value=""><br>
<input type="password" name="password" value=""><br>
<input type="hidden" name="lt" value="" />
<input type="hidden" name="execution" value="6A66F2A063BBB7D56ACC8B75FE90BB7E54300C800915F016B55B1A7B4B18DA0231F875DB909579CEC415A3FACDF98CB5" />
<input type="hidden" name="_eventId" value="submit" />      
<input type="submit" value="Ingresar">
</form>
</html>

name="execution" value=""上长且无聊的96位十六进制字符替换为https://pandora.pucp.edu.pe/pucp/login上生成的字符(查看浏览器上的网页源代码)

但我无法与Android App达成相同的目标;即我无法登录:它返回一个HTML代码,上面写着“抱歉我们无法登录”。这很重要,因为连接不被拒绝,但接受错误。

One more thing:我注意到您需要启用Cookie,因为我尝试在Firefox上登录并禁用它们,服务器只返回相同的登录表单。

同样,我可以通过浏览器登录Android模拟器。

总而言之,我需要:

  • 在https网页上发布
  • 为POST提供用户名,密码,执行代码和其他参数',如在http版本中使用的代码
  • 在应用上启用Cookie,以便服务器允许我登录

我已经在这里尝试过几百个片段,但没有一个片段全部有三个(大多数都有一个或两个)。

提前谢谢你,

阿尔

PS:对不起长代码而且可能令人困惑的描述。如果需要,请询问详细信息。

0 个答案:

没有答案