使用Java登录后解析HTML源代码

使用Java登录后解析HTML源代码,java,login,html-parsing,Java,Login,Html Parsing,我一直在尝试访问一个网站来解析我正在开发的安卓应用程序的数据,但我在登录时运气不佳 该网站是 下面是该页面的精简版表单(HTML): 但我的尝试返回页面,就好像登录信息不正确一样 如果您想亲自查看登录页面的行为,以下是一些测试登录详细信息: 昵称(用户名):testingA 密码:测试 该网站似乎还依赖于一个名为“NapaseSessionId”的Cookie。首先,请注意,如果您没有直接的权限,请注意,该网站可能会在其服务条款中排除这一点 要回答这个问题,网站拒绝登录的原因有很多很多。要成功地

我一直在尝试访问一个网站来解析我正在开发的安卓应用程序的数据,但我在登录时运气不佳

该网站是

下面是该页面的精简版表单(HTML):

但我的尝试返回页面,就好像登录信息不正确一样

如果您想亲自查看登录页面的行为,以下是一些测试登录详细信息: 昵称(用户名):testingA 密码:测试
该网站似乎还依赖于一个名为“NapaseSessionId”的Cookie。首先,请注意,如果您没有直接的权限,请注意,该网站可能会在其服务条款中排除这一点

要回答这个问题,网站拒绝登录的原因有很多很多。要成功地做到这一点,您需要尽可能接近浏览器处理事务的方式。要做到这一点,您需要了解真正的浏览器正在做什么

https更加棘手,因为许多http嗅探器无法处理它,但httpwatch声称它可以。检查HTTP事务,然后尝试复制它们

您的url.openConnection()调用实际上将返回httpurlconction的一个实例,并将其转换为该实例&然后您将能够轻松地设置各种http头,例如用户代理


最后一点,你说可能需要一块饼干。你的代码不会处理cookies。要做到这一点,您需要使用cookie管理器,例如:

您可能想要签出,然后。我正在尝试这一点,现在面临着各种各样的困难,但我相信其中一个项目是要走的路

祝你好运,随时通知我

<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>
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();
    }
}