Java Login Bot: HttpClient & jsoup (mit Captcha)

Wir haben uns in meinem letzten Beitrag bereits angeschaut, wie wir uns mit Java in Webseiten einloggen können, um Daten aus einem geschützen Bereich auszulesen. Wie gehen wir nun aber vor, wenn der Login durch ein Captcha geschützt ist? Wir verwenden wieder die freien Bibliotheken HttpClient 4.3 und jsoup 1.7.3.

Empfohlene Vorkenntnisse

Inhaltsverzeichnis

  1. Ausgangssituation
  2. HTTP Header auswerten
  3. Java Code anpassen
  4. Captcha Code auslesen und lösen

1. Ausgangssituation

Wir möchten uns auf folgender durch ein Zahlencaptcha geschützen Demo Seite einloggen. Unsere Login-Daten lauten admin:1234.

Im Erfolgsfall erhalten wir eine zufällige Zahlenkombination, die wir auslesen möchten.

Wir hatten bereits folgenden Code für den Login ohne Captcha erarbeitet.

2. HTTP Header auswerten

Was ändert sich nun durch das Captcha? Um das herauszufinden, schneiden wir wieder den HTTP-Header eines manuellen Logins mit.

Ich habe die für uns uninteressanten Zeilen bereits entfernt. Wir haben eine neue URL /login/index_captcha.php, damit auch einen neuen Referer, und einen neuen Parameter captcha=9, wobei die 9 hier willkürlich ist und wir offensichtlich bei jedem Request ein anderes Captcha haben.

3. Java Code anpassen

Passen wir unseren alten Java Code also an diese neuen Anforderungen an.

Ich habe die Java Klasse unbenannt in Zeile 3 (optional), URL und Referer angepasst in Zeile 9 und 15 und unserer Methode einen Parameter zur Übergabe des Captcha-Codes gegeben in Zeile 6. Diesen Captcha Code habe ich dann unserem POST Request in Zeile 13 hinzugefügt. Desweiteren habe ich unseren httpClient aus der Methode in die Klasse extrahiert (Zeile 4), da wir zum Auslesen des Captchas nun noch eine zusätzliche Anfrage erstellen werden – unser httpClient muss also global innerhalb der Klasse verfügbar sein.

4. Captcha Code auslesen und lösen

Wir haben unseren bisherigen Code nun also angepasst. Wie lesen wir nun aber das Captcha aus, um es unserer Login Methode zu übergeben? Wir erstellen eine neue Methode die das Captcha mit einem HttpGet ausliest, das Captcha mit jsoup parst und die Rechenaufgabe mit Java internen Mitteln löst. 🙂

Diese Lösung können wir nun unserer Login Methode übergeben. Dadurch, dass wir den selben httpClient verwenden, müssen wir uns nicht um Cookies kümmern, da diese automatisch verwaltet werden – das ist praktisch! Deswegen haben wir vorhin den httpClient aus der Methode extrahiert.

Unsere main Methode könnte nun beispielsweise so aussehen.

Die komplette Java Login Bot mit Catpcha Klasse hab ich euch hier zum Download bereit gestellt.

Java Login Bot: HttpClient & jsoup (mit Captcha)
Markiert in:                

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.