2016-04-23 43 views
0

我试图登录到网站使用Jsoup,但不幸我已经强迫一些问题 - 不知道如何通过提交按钮进入,因为没有身份证或它的名字。你能看看我的代码应该如何?Jsoup:登录没有ID或提交按钮名称

<form action="http://www.abcde.com/index.php?app=core&amp;module=global&amp;section=login&amp;do=process" method="post" id="login"> 
<input type="hidden" name="auth_key" value="auth_key"> 
<input type="hidden" name="referer" value="http://www.abcde.com/"> 
<h3>Login</h3> 

<div class="ipsForm ipsForm_horizontal"> 
    <fieldset> 
     <ul> 

      <li class="ipsField ipsField_primary"> 
       <label for="ips_username" class="ipsField_title">Username</label> 
       <div class="ipsField_content"> 
        <input id="ips_username" type="text" class="input_text" name="ips_username" size="30" tabindex="0"> 
       </div> 
      </li> 
      <li class="ipsField ipsField_primary"> 
       <label for="ips_password" class="ipsField_title">Password</label> 
       <div class="ipsField_content"> 
        <input id="ips_password" type="password" class="input_text" name="ips_password" size="30" tabindex="0"><br> 
       </div> 
      </li> 

     </ul> 
    </fieldset> 

    <div class="ipsForm_submit ipsForm_center"> 
     <input type="submit" class="ipsButton" value="Login" tabindex="0"> 
    </div> 
</div> 
</form> 

我已经开始:

Connection.Respose loginForm = Jsoup.connect("http://www.abcde.com/").method(Connection.Method.GET) 
         .execute(); 
    Document document = Jsoup 
         .connect("http://www.abcde.com/) 
         .data("cookieexists", "false") 
         .data("ips_username", "username", "ips_password", 
           "password").cookies(loginForm.cookies()).post(); 
+0

看看这里 - http://stackoverflow.com/questions/31871801/problems-submitting-a-login-form-with-jsoup你可能不会发送所有参数与您的登录请求。 – TDG

+0

我想,但我在视图源中没有viewstate或eventvalidation。 – adolzi

+0

这只是一个例子。您必须排除浏览器和服务器之间的http流量,或者您可以添加您尝试访问的实际URL。顺便说一句 - 你的源代码中有“auth_key”,我想你需要在某个地方使用它。我也会说这个值在会话之间改变。 – TDG

回答

0

首先,你必须发送一个GET请求到服务器 -

Document doc1 = Jsoup.connect("www.forumowisko.pl") 
       .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0") 
       .get(); 

然后你提取AUTH_KEY值 -

Element e = doc.select("input[id=auth_key]").first(); 
String authKey = e.attr("value"); 

现在你可以选择十二次POST请求 -

Document doc2 = Jsoup.connect("http://www.forumowisko.pl/index.php?app=core&module=global&section=login&do=process") 
     .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0")   
     .data("auth_key", authKey)  
     .data("ips_username", "MyUsername") 
     .data("ips_password, "MyPassword") 
     .data("rememberMe", "1") 
     .data("referer", "http://www.forumowisko.pl/") 
     .cookies(doc1.cookies()) 
     .post(); 

注意,POST请求具有从GET请求一个不同的URL。

+0

我已将userAgent,doc.select(“input [id = auth_key]”)更改为[name = auth_key],将doc1.cookies()更改为response.cookies (),它工作正常。谢谢你的帮助。但是我还有一个额外的问题,你能否提一下我应该如何正确地重定向到其他URL并且仍然被记录?有没有办法发送params或每次我必须以这种方式发送整个这些参数? – adolzi

+0

我不明白你的问题 - 登录后你想做什么? – TDG

+0

我的意思是发送cookie,但我解决了它。再次感谢 – adolzi