2016-04-29 9 views
0

Ich habe eine Login-Seite bei localhost\administration und ich verwende diesen Code anmelden:Wie logge ich mich mit Python in eine Webseite ein?

import urllib 
import http.cookiejar as ckj 
lg = {'nick':'john','pass':'password'} 
url = 'http://localhost/administration/' 
cj = ckj.CookieJar() 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 
lgdata = urllib.parse.urlencode(lg).encode("utf-8") 
opener.open(url,lgdata) 
res = opener.open(url) 
print(res.read()) 

Die Seite ist nur PHP-Code. Jetzt möchte ich auf dieser Seite localhost:8080/pentaho/Login einloggen, aber die Seite verwendet Javascript für Login und ich verstehe nicht, wie & welche Daten ich an die Seite senden sollte.

Ich verstehe, dass ich url = localhost:8080/pentaho/Login und lg = {'j_username':'username','j_password':'password'} haben muss, aber das ist nicht alle Informationen, die ich an die Aktion senden muss, oder das ist falsch. Hier

ist der HTML-Code, der Login-Formular:

<form name="login" id="login" action="j_spring_security_check" method="POST" 
onkeyup="if(window.event && window.event.keyCode && window.event.keyCode==13) 
{var buttonToClick = document.getElementById('loginbtn'); 
if(buttonToClick){ buttonToClick.click();}}"> 
    <input id="j_username" name="j_username" type="text" placeholder="" autocomplete="off"> 
    <input id="j_password" name="j_password" type="password" placeholder="" autocomplete="off"> 
    <button type="submit" id="loginbtn" class="btn">Login</button> 
    <input type="hidden" name="locale" value="en_US"> 
</form> 

Und hier ist das Javascript auf der Seite

<script type="text/javascript"> 
    function toggleEvalPanel() { 
    var evaluationPanel = $("#evaluationPanel"); 
    evaluationPanel.toggleClass("afterSlide"); 
    $("#eval-arrow").toggleClass("closed"); 
    } 
    function bounceToReturnLocation() { 
    // pass 
    var locale = document.login.locale.value; 
    var returnLocation = 'http\x3A\x2F\x2Flocalhost\x3A8080\x2Fpentaho\x2Findex.jsp'; 
    if (returnLocation != '' && returnLocation != null) { 
     window.location.href = returnLocation; 
    } else { 
     window.location.href = window.location.href.replace("Login", "Home") + "?locale=" + locale; 
    } 
    } 
    function doLogin() { 
    // if we have a valid session and we attempt to login on top of it, the server 
    // will actually log us out and will not log in with the supplied credentials, you must 
    // login again. So instead, if they're already logged in, we bounce out of here to 
    // prevent confusion. 
    if (false) { 
     bounceToReturnLocation(); 
     return false; 
    } 
    jQuery.ajax({ 
     type: "POST", 
     url: "j_spring_security_check", 
     dataType: "text", 
     data: $("#login").serialize(), 
     error:function (xhr, ajaxOptions, thrownError){ 
     if (xhr.status == 404) { 
      // if we get a 404 it means login was successful but intended resource does not exist 
      // just let it go - let the user get the 404 
      bounceToReturnLocation(); 
      return; 
     } 
     //Fix for BISERVER-7525 
     //parsereerror caused by attempting to serve a complex document like a prd report in any presentation format like a .ppt 
     //does not necesarly mean that there was a failure in the login process, status is 200 so just let it serve the archive to the web browser. 
     if (xhr.status == 200 && thrownError == 'parsererror') { 
      document.getElementById("j_password").value = ""; 
      bounceToReturnLocation(); 
      return; 
     } 
     // fail 
     $("#loginError").show(); 
     $("#loginError button").focus(); 
     }, 
     success:function(data, textStatus, jqXHR){ 
     if (data.indexOf("j_spring_security_check") != -1) { 
      // fail 
      $("#loginError").show(); 
      $("#loginError button").focus(); 
      return false; 
     } else { 
      document.getElementById("j_password").value = ""; 
      bounceToReturnLocation(); 
     } 
     } 
    }); 
    return false; 
    } 
    function loginAs (username, password) { 
    $("#j_username").attr("value", username); 
    $("#j_password").attr("value", password); 
    doLogin(); 
    } 
    $(document).ready(function(){ 
    $("#login").submit(doLogin); 
    if (false) { 
     bounceToReturnLocation(); 
    } 
    $("#login-background").fadeIn(1000, function() { 
     $("#login-logo").addClass("afterSlide"); 
     $("#animate-wrapper").addClass("afterSlide"); 
     $("#j_username").focus(); 
     $("#login-footer").addClass("afterSlide"); 
    }); 
    }); 
</script> 

Antwort

1

Sieht so aus, als sollten Sie eine AJAX-Anfrage stellen. Sie könnten versuchen, etwas wie:

import requests 

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0', 
    'Accept': 'application/json, text/javascript, */*; q=0.01', 
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'X-Requested-With': 'XMLHttpRequest' 
} 

login_url = '/pentaho/j_spring_security_check' 
s = requests.Session() 
data = {'j_username': YOURUSERNAME, 'j_password': YOURPASSWORD} 
s.post(login_url, data=login_data) 

content = s.post(url, data=data, headers=headers) 
print content 
+0

Danke für Sie beantworten, ich habe gerade versucht, aber es funktioniert nicht wirklich. Alles, was ich zurückbekomme, ist , was bedeutet, dass ich versuche, auf ein komplexes Dokument auf dem Server zuzugreifen – Andrew

0

an der Javascript Suchen Sie eine POST Anfrage an http://localhost:8080/pentaho/j_spring_security_check senden möchten mit der Nutzlast j_username=<username>&j_password=<password>

Der Ort der Sicherheitsprüfung hängt von der Position des Formulars ab, ich nahm an, dass es w wie im selben Ordner, sonst ändert sich die URL.

Verwandte Themen