我一直在尝试访问一个网站来解析我正在开发的Android应用程序的数据,但是在登录方面我没有运气。
网站为https://giffgaff.com/mobile/login
以下是该页面(HTML)表格的剥离版本:
<form action="/mobile/login" method="post">
<input type="hidden" name="login_security_token" value="b22155c7259f402f8e005a771c460670">
<input type="hidden" name="redirect" value="/mobile">
<input type="hidden" name="p_next_page" value="">
<input name="nickname" maxlength="25" type="text" value="" />
<input name="password" type="password" value="" />
<button name="step" type="submit" value="Login">Login</button>
</form>
任何人都可以建议我如何使用Java登录此网站然后解析重定向的页面?
到目前为止,我已经尝试了以下方面的流程:
public static void main(Context context) {
try {
// Construct data
String data = URLEncoder.encode("nickname", "UTF-8") + "=" + URLEncoder.encode("testingA", "UTF-8");
data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("testing", "UTF-8");
// Send data
URL url = new URL("https://giffgaff.com/mobile/login");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str = "";
String line;
while ((line = rd.readLine()) != null) {
str += line;
}
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle("Output");
alertDialog.setMessage(str);
alertDialog.setButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
wr.close();
rd.close();
} catch (Exception e) {
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle("ERROR");
alertDialog.setMessage(e.toString());
alertDialog.setButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
}
}
但是我的尝试返回页面,好像登录信息不正确一样。
如果您想亲自了解登录页面的行为,请参阅以下测试登录详细信息: 昵称(用户名):testingA 密码:测试 该网站似乎也依赖于名为“napaSessionId”的Cookie
答案 0 :(得分:2)
首先要注意的是,如果您没有直接许可,请注意,相关网站可能会在服务条款中排除这一点。
要回答这个问题,网站会拒绝登录的原因有很多。要成功完成此操作,您需要尽可能接近浏览器处理事务的方式。要做到这一点,你需要看看真正的浏览器在做什么。
https更加棘手,因为很多http嗅探器无法处理它,但httpwatch声称它可以。查看HTTP事务,然后尝试复制它们。你的url.openConnection()调用实际上会返回一个HTTPURLConnction的实例,强制转换为&amp;然后,您将能够轻松设置各种HTTP标头,例如User-Agent。
最后一点,你说可能需要一个cookie。您的代码不会处理cookie。为此,您需要使用cookie管理器,例如:http://download.oracle.com/javase/tutorial/networking/cookies/index.html
答案 1 :(得分:0)