2011-10-12 41 views
1

我一直在试图访问一个网站,为Android应用程序,我发展分析数据,但我有没有运气,当谈到在记录登录后解析HTML源。与Java

的网站

<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然后解析重定向页面登录到这个网站:https://giffgaff.com/mobile/login

而下方则是从该网页(HTML)剥离出来的形式的版本?

到现在为止,我已经试过上的线流程:

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”

曲奇

回答

2

首先一个忠告,如果你没有直接的权限要做到这一点,要小心,有问题的网站可能会在他们的服务条款排除这一点。

要回答这个问题,有很多原因很多网站会拒绝登录。要做到这一点,你需要尽可能接近浏览器如何处理交易。要做到这一点,你需要看看真正的浏览器在做什么。

HTTPS是更棘手,因为很多HTTP嗅探器无法处理它,但HttpWatch的要求就可以了。检查HTTP事务,然后尝试复制它们。

您的url.openConnection()调用实际上会返回一个HTTPURLConnction的实例,并将其转换为&,然后您将可以轻松设置各种http头,例如User-Agent。

最后一点,你说可能需要一个cookie。你的代码不会处理cookie。为此,您需要使用Cookie管理器,例如:http://download.oracle.com/javase/tutorial/networking/cookies/index.html

0

您可能想要查看Jsoup,htmlUnithttpUnit。现在我想这个权利,我面临着各种各样的困难,但我敢肯定,这些项目之一,是要走的路...

祝你好运,让我贴!