2014-04-27 24 views
13

chcę, aby zalogować się w here enter image description here kodu źródłowegoJak wysłać formularz logowania za pomocą jsoup?

<HTML><HEAD><TITLE>:: Dhaka Electric Supply Company Limited (DESCO)::</TITLE> 
<META http-equiv=Content-Type content="text/html; charset=utf-8"> 
<META http-equiv=Pragma content=no-cache> 
<META http-equiv=imagetoolbar content=no> 
<META content="Home Page of Dhaka Electric Supply Company Limited" name=description> 
<META content="MSHTML 6.00.2900.2180" name=GENERATOR> 
<style type="text/css"> 
    img{ 
     border:0px; 
    } 
</style> 
<script type="text/javascript" src="js/ajax-dynamic-content.js"></script> 
<script type="text/javascript" src="js/ajax.js"></script> 
<script type="text/javascript" src="js/ajax-tooltip.js"></script> 
<link rel="stylesheet" href="css/ajax-tooltip.css" media="screen" type="text/css"> 
<link rel="stylesheet" href="css/ajax-tooltip-demo.css" media="screen" type="text/css"> 
<LINK media=all href="css/global.css" type=text/css rel=stylesheet> 


</HEAD> 
<BODY> 
<DIV id=over style="DISPLAY: none"></DIV> 
<DIV class=baselayout> 
<DIV class=pagetopshadow></DIV> 
<DIV class=basebg> 
<DIV class=pageleft></DIV> 
<DIV class=pagecenter> 
<DIV id=Header> 
</DIV> 
<DIV id=Menu> 
</DIV> 
<DIV id=HomeContent> 
<DIV class=right> 
<DIV class=homeintro> 

<div style="padding-top: 0px;"> 
<script> 
function checkLogin() 
{ if(document.login.username.value == '') 
    { 
    alert('Please enter your account number'); 
    return false; 
    }return true; 
    } 
    alert('Payments through VISA and Master Card are stopped by DBBL. only DBBL Nexus card is allowed.'); 
    </script> 

     <form NAME='login' METHOD='POST' ACTION='authentication.php'> 

      <table width="350" height="181"cellpadding='0' cellspacing='0' border='0' style="border:#e5e5e5 0px solid; BACKGROUND: url(css/images/top9.png) no-repeat left top;" align="center"> 
      <tr> <td rowspan="6" style="padding-left:15px;"><img src="css/images/groupperms.gif" width="50" height="50"><td></tr> 
      <tr> 
       <td colspan="2" height="50"></td> 
      </tr> 
      <tr> 
       <td nowrap><span class="textcolor1">Account No. </span></td> 
       <td><input type='text' name='username' style="border:#cacaca 2px solid; color:#000099;" value=''></td></tr> 

      <tr> 
      <td> <a class="uiTooltip" href="#" onMouseOver="ajax_showTooltip(window.event,'tooltip/help.html',this);return false" onMouseOut="ajax_hideTooltip()">Help</a></td> 
      <td><input name="login" type='submit' value='Login' style="width:80px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; color:#FFFFFF; border:#000000 2px solid; cursor:pointer; background-color: #1b4585;" border="0" align="right" title="Login" onClick="return checkLogin();"/></td> 
      </tr> 

     </table> 

     </form> 
<table width="630" border="0" cellspacing="2" cellpadding="2" align="center" bgcolor="#FFFFFF" bordercolor="#FFFFFF"> 
    <tr> 
    <td width="80"></td> 
    <td><img src="images/right_3.gif"/></td> 
    <td><span class="textcolor"><strong><a href='https://www.desco.org.bd/index.php?page=internet-bill-payment' target="_blank" class="uiTooltip">Before, use this facility/services please read instructions...</a></strong></span></td> 
    </tr> 
    </table> 
<p align="center" class="textcolor"><strong><a href='https://www.desco.org.bd' class="uiTooltip">Back Home</a></strong></p> 
<table align="center" width="135" border="0" cellpadding="2" cellspacing="0" title="Click to Verify - This site chose VeriSign SSL for secure e-commerce and confidential communications."> 
<tr> 
<td width="135" align="center" valign="top"><script type="text/javascript" src="https://seal.verisign.com/getseal?host_name=www.desco.org.bd&amp;size=S&amp;use_flash=YES&amp;use_transparent=YES&amp;lang=en"></script><br /> 
<a href="http://www.verisign.com/ssl-certificate/" target="_blank" style="color:#000000; text-decoration:none; font:bold 7px verdana,sans-serif; letter-spacing:.5px; text-align:center; margin:0px; padding:0px;">ABOUT SSL CERTIFICATES</a></td> 
</tr> 
</table> 


</div> 
<div align="center" style="padding-top:10px;"> 



<CENTER><B> 
    Total Visits: 1</B></CENTER> 
</div> 
</DIV> 
</DIV> 
</DIV> 
</DIV> 
<DIV class=pageright></DIV></DIV> 
<DIV class=pagebotshadow> 
<DIV id=Footer>Copyright © 2010 Dhaka Electric Supply Company Ltd. All rights reserved.</DIV> 
</DIV> 
</DIV> 
</BODY> 
</HTML> 

zasadzie poniżej kod jest forma

<form NAME='login' METHOD='POST' ACTION='authentication.php'> 

     <table width="350" height="181"cellpadding='0' cellspacing='0' border='0' style="border:#e5e5e5 0px solid; BACKGROUND: url(css/images/top9.png) no-repeat left top;" align="center"> 
     <tr> <td rowspan="6" style="padding-left:15px;"><img src="css/images/groupperms.gif" width="50" height="50"><td></tr> 
     <tr> 
      <td colspan="2" height="50"></td> 
     </tr> 
     <tr> 
      <td nowrap><span class="textcolor1">Account No. </span></td> 
      <td><input type='text' name='username' style="border:#cacaca 2px solid; color:#000099;" value=''></td></tr> 

     <tr> 
     <td> <a class="uiTooltip" href="#" onMouseOver="ajax_showTooltip(window.event,'tooltip/help.html',this);return false" onMouseOut="ajax_hideTooltip()">Help</a></td> 
     <td><input name="login" type='submit' value='Login' style="width:80px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; color:#FFFFFF; border:#000000 2px solid; cursor:pointer; background-color: #1b4585;" border="0" align="right" title="Login" onClick="return checkLogin();"/></td> 
     </tr> 

    </table> 

    </form> 

enter image description here

próbuję to

package jsouptest; 

import org.jsoup.Connection; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 

public class JsouptTest { 
    public static void main(String[] args) throws Exception { 

     Connection.Response loginForm = Jsoup.connect("https://www.desco.org.bd/ebill/login.php") 
       .method(Connection.Method.GET) 
       .execute(); 

     Document document = Jsoup.connect("https://www.desco.org.bd/ebill/login.php") 
       .data("cookieexists", "false") 
       .data("username", "32007702") 
       .data("login", "Login") 
       .cookies(loginForm.cookies()) 
       .post(); 
     System.out.println(document); 

    } 

} 

ale im uzyskiwanie poniżej błędu

Exception in thread "main" java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:152) 
    at java.net.SocketInputStream.read(SocketInputStream.java:122) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:439) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424) 
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178) 
    at jsouptest.JsouptTest.main(JsouptTest.java:12) 

am brakuje czegoś? jak to naprawić?

Odpowiedz

23

Adres URL, którego używasz do wykonania żądania POST, jest błędny, po prostu dlatego, że gdy musisz wykonać konkretne żądanie do formularza, powinieneś użyć strony internetowej, która jest obecna w znaczniku formularza, w tym przypadku "authentication.php".

Więc kod będzie:

package jsouptest; 

    import org.jsoup.Connection; 
    import org.jsoup.Jsoup; 
    import org.jsoup.nodes.Document; 

    public class JsouptTest { 
     public static void main(String[] args) throws Exception { 

      Connection.Response loginForm = Jsoup.connect("https://www.desco.org.bd/ebill/login.php") 
      .method(Connection.Method.GET) 
      .execute(); 

      Document document = Jsoup.connect("https://www.desco.org.bd/ebill/authentication.php") 
      .data("cookieexists", "false") 
      .data("username", "32007702") 
      .data("login", "Login") 
      .cookies(loginForm.cookies()) 
      .post(); 
      System.out.println(document); 

     } 

    } 

Ten poprawnie pobiera stronę internetową, którą chcesz.

0

Dla mnie problem polegał na tym, że nie wysłałem wartości stanu widoku, wartości zdarzenia, wartości viewstategenerator.

Aby uzyskać te wartości, należy najpierw wysłać żądanie GET na stronę formularza logowania. W moim przykładzie była to strona default.aspx.

Następnie należy wyodrębnić te wartości i umieścić je w zmiennych. Oczywiście potrzebujesz również identyfikatora pola formularza i hasła, identyfikatora przycisku przesyłania, między innymi. Aby wyświetlić listę wszystkich wysyłanych zmiennych, zaloguj się ręcznie i użyj narzędzi do Chrome (sprawdź elementy), aby wyświetlić kartę sieciową dla żądania POST. Wewnątrz powinien pokazać nazwę użytkownika i hasło, które przesłałeś. Tam zobaczysz inne zmienne, które są wysyłane.

network tab in dev tools example

Następnie wysłać żądanie POST tym wszystkich tych zmiennych, zapisywanie plików cookie z odpowiedzi do zmiennej, a następnie można używać, aby przejść do innej strony.

Kod:

import java.io.IOException; 
import java.util.Map; 
import org.jsoup.Connection; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.nodes.FormElement; 


public class get_example { 

public static void main(String[] args) throws IOException { 
    //=================================== 
    Connection.Response response2 = Jsoup.connect("yourloginpage") 
      .method(Connection.Method.GET) 
      .execute(); 

    Document responseDocument = response2.parse(); 

    Element eventValidation = responseDocument.select("input[name=__EVENTVALIDATION]").first(); 
    Element viewState = responseDocument.select("input[name=__VIEWSTATE]").first(); 
    Element viewStateGen = responseDocument.select("input[name=__VIEWSTATEGENERATOR]").first(); 



    Connection.Response response = Jsoup.connect("yourloginpage") 
      .method(Connection.Method.POST) 
      .data("ctl00$plnMain$txtLogin", "username") 
      .data("ctl00$plnMain$txtPassword", "password") 
      .data("ctl00$plnMain$Submit1", "Log In") 
      .data("ctl00$ucCopyright$hdnPrivacyStatement", "Privacy Statement") 
      .data("ctl00$ucCopyright$hdnTermsOfUse", "Terms of Use") 
      .data("__VIEWSTATE", viewState.attr("value")) 
      .data("__VIEWSTATEGENERATOR", viewStateGen.attr("value")) 
      .data("__EVENTVALIDATION", eventValidation.attr("value")) 
      .execute(); 


    Map<String, String> cookies = response.cookies(); 


    Document homePage = Jsoup.connect("anotherpage") 
      .cookies(cookies) 
      .get(); 


    System.out.println(homePage.body().html()); 

} 
} 
0

W moim przypadku, składa się z trzech etapów:

  1. Get ciasteczka od strony formularza logowania;
  2. Wpisz dane logowania do formularza logowania action= URL, odnów pliki cookie;
  3. Użytkownik zostanie przekierowany na stronę indeksu. Nie parsuj tutaj, po prostu prześlij Response do końcowego docelowego adresu URL.
  4. Parsować po dotarciu do ostatniej strony.

Pliki cookie należy odnawiać w każdym kroku, czasami dodawać wpisy, a czasem trzeba je wyczyścić i zresetować. Koniecznie sprawdź transmisję sieciową za pomocą narzędzia Internet Explorer/Chrome/Firefox Dev (F12), w panelu Sieć, część cookies.