我需要一些帮助。我正在开发一个需要以 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=""
用生成的on替换冗长乏味的96位十六进制字符https://pandora.pucp.edu.pe/pucp/login
(查看浏览器上的网页源代码)
但我无法使用 Android 应用程序达到相同的点;即我无法登录:它返回一个 HTML 代码,上面写着“对不起,我们无法登录”。这很重要,因为连接不会被拒绝,而是被错误地接受。
One more thing
:我注意到您需要启用 cookie,因为我尝试在禁用 Firefox 的情况下登录,而服务器只是返回了相同的登录表单。
同样,我可以通过浏览器登录 Android 模拟器。
所以,总而言之,我需要:
- 在 https 网页上发布
- 为 POST 提供用户名、密码、执行代码和其他“参数”,就像在 http 版本上工作的代码一样
- 在应用程序上启用 cookie 以便服务器允许我登录
我已经在这里尝试了几乎数百个片段,但没有一个具有所有三个点(大多数只有一两个)。
先感谢您,
阿尔多
PS:抱歉,代码很长,描述可能很混乱。如果需要,请询问详细信息。