2017-11-04 1 views
0

Ist es möglich, sich bei Websites anzumelden, die csrf-Tokens verwenden, und solche, die JSOUP verwenden? Die Webseite, in die ich mich einloggen möchte, ist aliexpress.com. Das scheint viele Eingabewerte zu haben, und ich bemerkte, dass sich das csrf-Token bei jedem Versuch ändert. Ich vermute, dass dies Schutzmaßnahmen sind, um Spam zu blockieren. Ich bin ziemlich neu in HTML und fragte mich, ob es überhaupt möglich ist, sich auf solchen Seiten anzumelden? DankAnmelden in Websites mit JSoup, ist das möglich?

Hier ist mein Code, falls ich etwas falsch gemacht habe:

public static void main(String[] args) throws IOException { 

    Connection.Response loginForm = Jsoup.connect("http://login.aliexpress.com") 
     .method(Method.POST) 
      .data("cookieexists", "false") 
      .data("loginId", "[email protected]") 
      .data("password", "xxxxxx") 
      .data("event_submit_do_login", "submit") 
      .data("submit-btn", "Sign In") 
      .data("appName", "aebuyer") 
      .data("appEntrance", "default") 
      .data("_csrf_token", "vdspQZH4cMoQT6GxLyU0a7") 
      .data("rdsToken", "") 
      .data("cid", "a832dd6d-990f-44eb-8bdb-9ec49d1c0a99") 
      .data("umidToken", "4e6219e38c34346dc2bb7914a54794aac7645e7b") 
      .data("lang", "en_us") 
      .data("hsid", "VP4zHOZfVs1Ec4qqEsI1mA") 
      .data("isRDSReady", "false") 
      .data("isUMIDReady", "false") 
      .data("umidGetStatusVal", "") 
      .data("bizParams", "") 
      .data("isRequiresHasTimeout", "false") 
      .data("loginHost", "https://passport.aliexpress.com/") 
      .data("scene", "") 
      .data("isMobile", "false") 
      .data("modulus", "d3bcef1f00424f3261c89323fa8cdfa12bbac400d9fe8bb627e8d27a44bd5d59dce559135d678a8143beb5b8d7056c4e1f89c4e1f152470625b7b41944a97f02da6f605a49a93ec6eb9cbaf2e7ac2b26a354ce69eb265953d2c29e395d6d8c1cdb688978551aa0f7521f290035fad381178da0bea8f9e6adce39020f513133fb") 
      .data("exponent", "10001") 
      .data("ua","099#KAFEx7E+TEGE6YTLEEEEE6twSXLoZ6NHDu3YS6tqDywMC6t3gR9YLfD1SryM4MDFYuJoV6t1YRB7n6f1Ych6n6g1DRJo+xqTETFUEcZt288mby1PYPrfds1gLjdTEEi5DEEErGFEHCLlhRaTG9llEJIm/KRlbpZV8MixZy164GFEJFwlsyaDMOcmby1TSV3WPy1tY0s3YuaHLyZTvbd9E7EFD67EEKqTETAEluZdtkH7NyhGYfciuOkG/MhXaQ3bAMZtY0s3JGFET6i5EE1iE7Eo73lP/3m4NVkAbIJi4leDbRZTvbuwsqk6/MhXaCqTETfEEcZt9CXmby1PYPrfds1tYo8XCV/zLybTETDElapdLIallGEeOOCxls1Pr08FSP8zYovKZMRc41qTETFUEcZt9Scmby1PYPrfds1gLioTETzElsXdLUQEWECmYKhMtV8gPy1fnM9SZyvHLioTETYQldXd7FEEVcCmYKhMtV8gPy1XC0ysUoSnE7EiK3l6/wqaEcExOMRyv9cGNyvHYp5TEEi5D7EE/GFETJDovl8JE7hMDwGEmba3U61vv0XBaYevDpiRciUt1OLjbo4Qc7rczQ8nZR2Bw7CWSQ/vPsqqi9exUqZ96Yz6bQWAnWuWLLrDA2iebRMREyB7Pbcdb4QsPok4QioWiYeWZyhqqOKR1eJ6UI2Vcgw6bXkPnypX1YuYalp7Pwnh1eyJroeXFSZ6UcCsZLpzLUZ1WsJhvLqpa291dzCncU7RbohMtscSi7hYSeJFFsxcTy/0/fhCv4bprqrANa2n+GCWds166OIp+WJFrtSSPFnRrVs8SAUM+GZDnR+kbyo6cWyIbISMHG1uVPybZz4M/vl4DXym8jvqaWw7zVZBNdZ6bteWNREZwErbnpywry4t+O/kuV8W/EPcuzpYa0uVaYnzZuB5hg9ulrimV65MJwnuV6i4DTY03BlWaccJ8ypu9u2A8WWzPMIszbcYDi4nEoCYDpiB4gvl9zkGVPq0IlbuQfcxVyrs37eQSyJKcw4RLeXKPt+Z4LslVewCYREnCQZVgcx+hz+l/ri5Vfx+8IRuNP94S0Yo3/sLDVwjvK4l7uyxOGFETYilssn1dASTEELlluaLom7wxeSTE1LlluZdt3illllls3aSt3t3llle33iSw6alluUdt37q33llWLaStEGde7FE5YHKJ7ThVa6o3kskwmyV0HUC6Df39yzU0xEG1DN7Vafo3kikLw+IRhj2qbAB6OT2qago1DN7VaTo3kikawWIRhj2qoAB6OT2qafo1DN7VmGtI8EJE7EhlAaP/3iSJGFET6i5EE1mE7EFlllbrxqTETFUluZdDWkmby1PYPrfds1gLioTETYQltCdBHGEV38mYKhMtV8gPy1XC0ysUoSnE7EB63l7/h6LEc7JNM1j83X0UykG+qxEdUF9E7EFD67EE1qTETFUluZt9CZmby1PYPrfds1gLjdTEEi5DEEE4GFEJFwlsyaD0Lxmby1TSV3WPy1tY0s3YuaHLyZTvbuiE7Eo73lP/3m+q0kAbIJi4leDbRZTvbuwsqk6/MhXaVqTETAEluZdtkpCNyhGYfciuOkG/MhXaQ3bAMZtY0s3IGFEHSwlsyDe2VkAbpZ1ZVnabRZTC0sR8u86") 
      .followRedirects(true) 
     .execute(); 

    // TODO code application logic here 
    Document doc = loginForm.parse(); 



    System.out.print("website title:" + doc); 
} 

}

+0

Ja, es ist möglich. Schauen Sie sich hier ein Beispiel an - https://stackoverflow.com/questions/31871801/problems-submitting-a-login-form-with-jsoup/31877829#31877829 – TDG

+0

@TDG Hallo, Entschuldigung für Missverständnisse. Es scheint immer noch nicht für mich zu funktionieren und bringt mich auf den Login-Bildschirm. Ich habe alle Eingabewerte eingeschlossen, aber ich denke der Grund, warum es nicht funktioniert, ist, weil einige Eingabewerte (wie csrf-Token) sich bei jeder neuen Instanz ändern. Wäre das der Grund? –

Antwort

1

Da Sie wissen, die, wie ich senden parametrers davon aus, dass Sie wissen, wie der Browser Entwickler-Tools verwenden, so es wird Ihnen leicht fallen:
Um sich auf der Website anzumelden, müssen Sie zwei Schritte ausführen. Der erste Schritt ist das Senden einer GET Anfrage und das Parsen des Ergebnisses. Der zweite Schritt besteht darin, eine POST Anfrage mit den erforderlichen Parametern zu senden, einschließlich der, die Sie von Schritt 1 erhalten haben.
Ich habe gesehen, dass beim Senden der ersten get Anfrage an https://login.aliexpress.com/ das Ergebnis nicht die Werte enthält _csrf_token usw. Der Browser sendet eine weitere Anfrage an https://passport.aliexpress.com/mini_login.htm?lang=en_us&appName=aebuyer&appEntrance=default&styleType=auto&bizParams=&notLoadSsoView=false&notKeepLogin=true&isMobile=false&rnd=0.9476178801629621, also müssen Sie das gleiche tun und das Ergebnis parsen (beachten Sie, dass der letzte Parameter der get-Anfrage irgendeine Zufallszahl ist. Ich denke, Sie sollten auch die Zeichenfolge zufällig setzen und nicht dieselbe Nummer verwenden immer wieder, könnte es einige Schutzmaßnahme) sein:

String firstURL = "https://passport.aliexpress.com/mini_login.htm?lang=en_us&appName=aebuyer&appEntrance=default&styleType=auto&bizParams=&notLoadSsoView=false&notKeepLogin=true&isMobile=false&rnd=0.9476178801629621"; 
Connection.Response loginForm = Jsoup.connect(firstURL) 
    .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0")  
    .method(Method.GET); 

Danach werden Sie die Antwort zu analysieren haben und die Parameter, so etwas wie dieses extrahieren -

Element e = doc.select("input[id=fm-cid]").first(); 
String cid = e.attr("value"); 

Nachdem alle benötigten Werte Parsen, können Sie die POST Anfrage senden.