Problem mit urllib

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mnietz
User
Beiträge: 14
Registriert: Mittwoch 5. März 2003, 11:06
Wohnort: Berlin

Mittwoch 5. März 2003, 18:42

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Mittwoch 5. März 2003, 19:03

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.
mnietz
User
Beiträge: 14
Registriert: Mittwoch 5. März 2003, 11:06
Wohnort: Berlin

Mittwoch 5. März 2003, 22:25

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
Benutzeravatar
strogon14
User
Beiträge: 58
Registriert: Sonntag 23. Februar 2003, 19:34
Wohnort: Köln
Kontaktdaten:

Mittwoch 5. März 2003, 23:51

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!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 6. März 2003, 02:00

Hi mnietz,

hier sind ein paar Beispiele:

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

Gruß

Dookie
mnietz
User
Beiträge: 14
Registriert: Mittwoch 5. März 2003, 11:06
Wohnort: Berlin

Donnerstag 6. März 2003, 10:28

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:
Antworten