wildlife

Download einer Datei mittels WinHttp.WinHttpRequest.5.1 mit AutoIt über https-Verbindung

// November 12th, 2011 // IT, Tutorials

Vor kurzem stand ich vor dem Problem, dass ich zu einer https Seite (also einer Webseite mit SSL Verschlüsselung) ohne vertrauenswürdigem Zertifkat mittels AutoIt verbinden musste, um eine Datei herunterzuladen. Um Zugriff auf die Seite zu bekommen, ist eine Authentifizierung erforderlich, die ich per HTTP POST an den Webserver übermitteln möchte. Bei dieser ersten Verbindung hat das Script jedoch einige Zeit nicht mehr reagiert und anschließend eine Windows-Meldung geworfen, die auf das (ungültige) Zertifikat hinwies.

tamper data result

Für die Erstellung des Zugriffs verwende ich ein WinHttp.WinHttpRequest.5.1 Objekt welches ich mit ObjCreate erstelle. Anschließend prüfe ich, ob das Objekt erfolgreich erstellt wurde und breche im Fehlerfall die Funktion ab. Im Anschluss setze ich für die Option Nr. 4 den Wert 13056. Hiermit werden Fehler bzgl. SSL unterdrückt, die, wie in meinem Beispiel, durch ein nicht vertrauenswürdiges Zertifikat signiert sind.

Um den eigentlichen Login durchzuführen ist ein POST Kommando erforderlich, über welches der Benutzer und das Passwort an den Server übergeben wird. Damit man weiß, welche Inhalte ein solches Paket enthält, nutzt  man normalerweise Network Paket Analyzer wie WireShark. Da es sich hier jedoch um eine SSL verschlüsselte Verbindung handelt, funktioniert dies nicht, da der Inhalt der Pakete nicht mehr sichtbar ist. Mit dem FireFox Plugin TamperData können wir dies jedoch umgehen. Hier können wir die Paketinhalte sehen, bevor diese verschlüsselt werden. Wie auf dem Screenshot zu sehen ist, ist der Parameter "username=torsten.feld&password=xxxxxx". Dieser muss einfach mit der Methode 'Send' an den Server geschickt werden.

Damit die Datei heruntergeladen werden kann, fehlt nur noch die Methode 'Open', welche den Pfad zu der Datei angibt und wiederum mit 'Open' versendet wird. Über die Methode 'responseText' bekommen wir die Rückgabe des Servers.

Die Informationen wie Useragent, Contenttype und Referrer, welche über 'SetRequestHeader' gesetzt werden können, sind meist erforderlich, können aber gerade bei Downloads von Servern, welche eine Steuerung über ein Script unterbinden wollen, hinter's Licht führen.

Fragen dürfen gerne in den Kommentaren gestellt werden. Und hier ist ein Beispielscript:

	Local $lHttpResponse
	Local $lBaseUrl = "https://xxxxxx.srv.xxxxx.com/"
	$objhttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
	If Not IsObj($objhttp) Then
		MsgBox(16,"Error","Could not connect to webserver")
		SetError(1)
		Return -1
	EndIf
	$objhttp.Option(4) = 13056 ; turns off ssl error messages and warnings
	$objhttp.Open("POST", $lBmgtBaseUrl & "login", false)
	$objhttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 4.0.20506)")
	$objhttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
	$objhttp.SetRequestHeader("Referrer", $lBmgtBaseUrl & "login")
	$objhttp.Send("username=" & $lUsername & "&" & "password=" & $lPassword)
	$objhttp.Open("POST", $lBmgtBaseUrl & "files/file.exe", false)
	$objhttp.Send
	$lHttpResponse = $objhttp.responseText

 

Ähnliche Beiträge:


5 Responses to “Download einer Datei mittels WinHttp.WinHttpRequest.5.1 mit AutoIt über https-Verbindung”

  1. Michael says:

    So was ähnliches passiert mir auch immer wieder. Z.B. bei github.com. Wenn man hier etwas per wget herunterladen möchte, gibt es einen Fehler. Ich löse das mit dem "--no-check-certificate" Schalter von wget. Mit dieser Option wird das Zertifikat nicht gecheckt.

  2. Ich bin gerade durch Zufall hier gelandet. Das ist ja ml ne tolle Seite. Schöner Style. Das selbe Problem hatte ein Freund von mir auch. Er hat es ähnlich gelöst, aber ich frage ihn nochmal. LG

  3. Kami says:

    Hey das hier ist echt mal das Zentrum des Wissens. Ich verstehe zwar nur die Hälfte, aber versuche mich mal reinzufuchsen. Weiter so und ach ja einen guten Rutsch ins neue Jahr. :D

Leave a Reply