2014-04-27 1 views
13

내가 here enter image description here 소스 코드에 로그인 할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> 

양식

<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

내가이

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

    } 

} 
,536,913을 시도하고있다 63,210

하지만 오류가 아래 점점 메신저

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) 

오전 뭔가가있다? 그것을 고치는 방법?

답변

23

POST 요청을 수행하기 위해 사용하는 URL이 잘못되었습니다. 양식에 특정 요청을해야 할 때 양식 태그에있는 웹 페이지를 사용해야하는 경우입니다.이 경우 "authentication.php".

그래서 코드는 다음과 같습니다

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

     } 

    } 

이 사람은 정확하게 당신이 원하는 웹 페이지를 검색합니다.

0

문제는 viewstate, eventvalidation, viewstategenerator 값을 보내지 않았다는 것입니다.

이 값을 얻으려면 먼저 로그인 양식 페이지로 GET 요청을 보내야합니다. 내 인스턴스에서 이것은 default.aspx 페이지였습니다.

그런 다음 해당 값을 추출하여 변수에 넣어야합니다. 물론 폼 로그인과 패스워드 필드 ID, 제출 버튼의 id 등이 필요합니다. 전송되는 모든 변수의 목록을 보려면 수동으로 로그인하고 chrome dev 도구 (요소 검사)를 사용하여 POST 요청에 대한 네트워크 탭을보십시오. 내부에 제출 한 사용자 이름과 비밀번호가 표시되어야합니다. 거기에 전송 된 다른 변수가 표시됩니다.

network tab in dev tools example

다음, 모든 변수를 포함하여 POST 요청을 보낼 변수로 응답에서 쿠키를 저장하고는 다른 페이지로 이동하는 것을 사용할 수 있습니다.

코드 :

내 경우
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

,이 세 단계로 구성

  1. 받기 로그인 폼 페이지에서 쿠키;
  2. 로그인 양식에 대한 인증 정보 게시 action= URL, 쿠키 갱신;
  3. 사용자가 색인 페이지로 리디렉션됩니다. 여기서 구문 분석하지 마시고 Response을 최종 타겟 URL로 보내주십시오.
  4. 최종 페이지에 도달하면 분석합니다.

쿠키는 매 단계마다 갱신해야하며 때로는 항목을 추가해야하며 때로는 삭제하고 재설정해야합니다. Internet Explorer/Chrome/Firefox Dev 도구 (F12)를 사용하여 네트워크 전송을 확인하고 네트워크 패널의 cookies 부분을 확인하십시오.

관련 문제