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

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 :(
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Meinst du jetzt HTTPS oder HTTP mit htpasswd?
Hast du dir schon urllib und urllib2 angesehen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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???
Zuletzt geändert von jens am Montag 31. Januar 2005, 13:23, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ne, die URL wird nicht verschlüsselt (nicht bestätigt, bin mir aber ziemlich sicher).
Aber ich glaube POST Werte werden es.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich denke das du da auch recht hast... Ob man die anfrage zu einem POST umbauen kann???
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 :?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten