Seite 1 von 1

Wie eine HTTPs Seite mit httplib.HTTPSConnection() abrufen??

Verfasst: Freitag 28. Januar 2005, 10:27
von jens
Wie kann man eine Username/Passwort geschützte HTTPs abrufen???
Das muß wohl irgendwie mit httplib.HTTPSConnection() gehen... Aber wie geben ich Username / Passwort an?

EDIT: Hab mal rumgesucht und mit das folgende gebaut:

Code: Alles auswählen

#!/usr/bin/python

import httplib, base64

headers = {
    "User-Agent": "Python Test v0.1",
    'Authorization': 'Basic %s' % base64.encodestring("UserName:Passwort").replace("\012", "")
}

c = httplib.HTTPSConnection( "beispiel.de" )

c.putrequest( 'GET', "/bsp.html", 0, headers )
c.endheaders()

response = c.getresponse()
print response.read()

Tut's aber leider nicht :(

Verfasst: Freitag 28. Januar 2005, 13:41
von Leonidas
Meinst du jetzt HTTPS oder HTTP mit htpasswd?
Hast du dir schon urllib und urllib2 angesehen?

Verfasst: Freitag 28. Januar 2005, 14:22
von jens
Ich denke es ist https mit htpasswd... Ich will bei Hosteurope eigentlich nur die Apache-Log-Files abholen... Da kommt man aber immer nur dran, wenn man eingeloggt ist: https://kis.hosteurope.de

Das ist wohl irgendwas mit "RC4 128Bit" verschlüsselt...

Mit urllib kann man https Seiten abfragen? Schau ich mir mal an...

Verfasst: Freitag 28. Januar 2005, 15:21
von Leonidas
HTTPS ist ja eigentlich nur HTTP mit SSL Tunnel. Aber deine Seite nutzt nicht htpasswd: diese nutzt es.

Du kannst den SSL Tunnel auch extern zerlegen, sodass der Python Interpreter nur eine 'normale' HTTP Session sieht, mit Stunnel.

Verfasst: Freitag 28. Januar 2005, 15:23
von jens
Hab jetzt eine andere Lösung gefunden... In einer FAQ hab ich erfahren, das man KundenNr. und Passwort direkt in die URL packen kann:

http://www.hosteurope.de/faq/index.php?cpid=3215

Somit kann ich die Daten mit urllib2.urlopen() abfragen... Als URL nehme ich:

"https://kis.hosteurope.de/administration/webhosting/admin.php?menu=13&mode=logfile&wp_id=11195&kdnummer=%s&passwd=%s"

wird dabei die eigentliche URL eigentlich auch verschlüßelt, oder wird die im Plaintext (also mit meinen Daten) übertragen???

Verfasst: Freitag 28. Januar 2005, 16:01
von Leonidas
Ne, die URL wird nicht verschlüsselt (nicht bestätigt, bin mir aber ziemlich sicher).
Aber ich glaube POST Werte werden es.

Verfasst: Freitag 28. Januar 2005, 16:25
von jens
Ich denke das du da auch recht hast... Ob man die anfrage zu einem POST umbauen kann???

Verfasst: Freitag 28. Januar 2005, 16:43
von Leonidas
Hängt ab, ob das Script die Sachen auch per POST annimmt (Edit: Was laber ich? Natürlich tut sie das, sonst wäre eine HTTPS Verschlüsselung in einem normalen Browser absolut sinnlos, wenn die Daten unverschlüsselt über GET laufen). Ja, so wie ich das sehe, nimmt die Seite POSTs (die Web Developer Extension für Firefox ist genial, konvertiert Formulare sogar on-the-fly von GET nach POST und andersrum).

urllib2 und POST.

Verfasst: Montag 31. Januar 2005, 13:23
von jens
Das angegebene Beispiel ist nicht ganz vollständig... So geht's aber:

Code: Alles auswählen

import urllib2, urllib

ID = "12345"

URL = "https://kis.hosteurope.de/administration/webhosting/admin.php?menu=13&mode=logfile&wp_id=%s" 
URL = URL % ID

POSTdata = {
    "kdnummer":"[i]KundenNummer[/i]",
    "passwd":"[i]Passwort[/i]"}

encodedPOST = urllib.urlencode(POSTdata)

c = urllib2.urlopen(URL, data=encodedPOST)
print c.read()
Dabei macht urllib.urlencode() nichts anderes als eine Umformung (natürlich mit encoding von Sonderzeichen): passwd=Passwort&kdnummer=KundenNummer

Macht es eigentlich irgendein Sinn ein c.close() zu machen???

Ich hoffe nur, das damit wirklich KundenNummer und Passwort verschlüßelt übertragen werden :?

Verfasst: Montag 31. Januar 2005, 13:38
von Leonidas
jens hat geschrieben:Macht es eigentlich irgendein Sinn ein c.close() zu machen???
Ja, klar. Denn c ist wie file() ein file-like object, und wenn man ein file like object hat, ist es immer praktisch .close() zu nutzen.
jens hat geschrieben:Ich hoffe nur, das damit wirklich KundenNummer und Passwort verschlüßelt übertragen werden :?
Kannst ja mal nen Sniffer ansetzen (ggf erstmal mit falschen Daten) und gucken ob man im Netzwerktraffic deine Daten im Klartext findet. Aber ich denke POST wird schon verschlüsselt, sonst werde ich Onlinebanking nie wieder benutzen :roll: