Seite 1 von 1

Problem mit urllib

Verfasst: Mittwoch 5. März 2003, 18:42
von mnietz
Hallo Leute,

ich möchte gerne mit der Funktion open_http("http://www.irgendwas.de") aus der Klasse URLopener eine http Verbindung herstellen. Ich stoße dabei aber immer auf folgende Fehlermeldung: "IOError: [Errno http error] no host given"
Benutzte ich aber die Funktion urllib.openurl("http://www.irgendwas.de") funktioniert alles problemlos.

Hat jemand ne Idee?

PS. Ich muss will nur deswegen den 1. Weg gehen weil die zweite Variante FancyURLopener bemüht, und die verschlückt unbekannte HTTP Errors einfach.
Wenn jemanden von euch ein anderer Weg einfällt wäre ich sehr dankbar...

Grüße,

MN.

Verfasst: Mittwoch 5. März 2003, 19:03
von Milan
Hi mnietz, damit solltest du es eigentlich auch so schaffen:
Dookie hat geschrieben:

Code: Alles auswählen

import httplib

conn = httplib.HTTPConnection("www.sol.at") #Verbindung zum Webserver herstellen
conn.request("GET", "/fritz/ip.php") #die Seite "/fritz/ip.php" anfordern
res = conn.getresponse() # Antwort vom Webserver holen
if res.reason == "OK": # Seite existiert und ist erreichbar
    ipnummer = res.read() # ganze Seite lesen
conn.close()
Das öffnet die Seite "http://www.sol.at/fritz/ip.php" Inwiefern das Fehler berücksichtig, weiß ich nicht, aber rein über die httplib solltest du das auch schaffen, wenn du in der urllib auch nur eine http-verbinung herstellen willst.

auslesen des http errorcodes

Verfasst: Mittwoch 5. März 2003, 22:25
von mnietz
Was mir vor allem wichtig ist , das ich die Möglichkeit habe ggf. auf die http errorcodes zuzugreifen. Das heißt ich möchte jenachdem ob ein timeout auftritt oder die seite nicht verfügbar ist verzweigen können.

Welche Werte kann res denn in deinem Beispiel annehmen? Ich will irgendwie auslesen wenn z.b. http error 404 auftritt.

Vielen Dank,

mnietz

Kein Schema in der URL angeben!

Verfasst: Mittwoch 5. März 2003, 23:51
von strogon14
Wie der Name der Methode open_http() schon sagt, ist sie dafür zuständig URLs über das HTTP Protokoll zu laden. Dann muss/darf höchstwahrscheinlich in der URL auch kein Schema mehr angegeben werden. Also statt 'http://host/path' nur 'host/path'.

Ich habe jetzt nicht in die Sourcen geschaut, aber die Dokumentation zu urllib, insbes. zur Methode open() des URLopener Objekts scheint mir sehr darauf hinzudeuten:

http://www.python.org/doc/current/lib/u ... -objs.html

Probiers's einfach mal ohne das 'http://' aus!

Verfasst: Donnerstag 6. März 2003, 02:00
von Dookie
Hi mnietz,

hier sind ein paar Beispiele:

http://www.python.org/doc/current/lib/h ... mples.html

Gruß

Dookie

so funktionierts

Verfasst: Donnerstag 6. März 2003, 10:28
von mnietz
Vielen Dank euch, mit der httplib funktionierts auf jeden fall. Mit der urllib.open_http läufts auch mit open_http("www.heise.de") nicht. Komisch, aber mit der anderen Lösung bin ich sehr zufrieden.

Hab gestern das erste Mal was mit Python gemacht und bin schon begeistert - auch dank eurer Unterstützung :wink: