urllib2.urlopen liefert falsche antwort..

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nonsenz
User
Beiträge: 14
Registriert: Montag 23. Januar 2006, 15:40

Montag 23. Januar 2006, 15:49

hallo zusammen...

...habe folgendes problem:
versuche mittels eines python programms links zu überprüfen. klappt an sich auch ganz gut, nur scheinbar sind die ergebnisse nicht immer richtig. ein besipiel:

Code: Alles auswählen

HTTP://de.wikipedia.org/wiki/Russische_Sprache
die seite existiert und ist öffentlich. ich kann sie auch via

Code: Alles auswählen

wget --spider
erfolgreich checken.
python liefert:

Code: Alles auswählen

HTTP Error 403: Forbidden
testweise taucht das problem auch schon bei folgender zeile auf:

Code: Alles auswählen

import urllib2
urllib2.urlopen(urllib2.Request('http://de.wikipedia.org/wiki/Russische_Sprache'))
ergebnis:

Code: Alles auswählen

urllib2.HTTPError: HTTP Error 403: Forbidden
übersehe ich irgendetwas?
kann mir jemand weiterhelfen, bitte?

danke schonmal und ciao
nons
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 23. Januar 2006, 15:51

Ja. Der User-Agent ist von Python aus "urllib2", und wahrscheinlich blockiert Wikipedia Zugriffe von User-Agents die es nicht kennt/nicht mag.

Guck einfach dass Du einen anderen User-Agent-Header mitschickst. Wie steht in der Doku zu urllib2.

--- Heiko.
nonsenz
User
Beiträge: 14
Registriert: Montag 23. Januar 2006, 15:40

Montag 23. Januar 2006, 16:18

alles klar...scheinbar klappts so:

Code: Alles auswählen

import urllib2
req = urllib2.Request('http://de.wikipedia.org/wiki/Russische_Sprache')
req.add_header('User-agent','Mozilla/5.0')
urllib2.urlopen(req)
(nur der vollständigkeit halber)
nochmals danke für die schnelle hilfe...

nons
nonsenz
User
Beiträge: 14
Registriert: Montag 23. Januar 2006, 15:40

Montag 30. Januar 2006, 11:08

...da ich das gefühl habe, mein jetziges problem passt hier gut hinter:

versuche eine gültige ftp-adresse

Code: Alles auswählen

ftp://xxx.xxx.xxx.xxx/yyyy/zzzz/
mit

Code: Alles auswählen

urllib2.urlopen()
abzufragen. leider liefert mir die anfrage:

Code: Alles auswählen

[Errno ftp error] Zugriff verweigert
(im browser kein problem)
wenn ich das ganze ohne die unterverzeichnisse mache klappt es.
also

Code: Alles auswählen

ftp://xxx.xxx.xxx.xxx
der weg über ftplib scheint mir nicht sinnvoll.
was könnte hier nun wieder das problem sein?

danke und ciao
nons
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 30. Januar 2006, 13:17

urllib2 macht bei FTP-URLs keine automatische Pfaderweiterung, was Dein Browser anzunehmenderweise macht.

Probiers mal mit der URL:

Code: Alles auswählen

ftp://<meinhost>/
urllib2 schickt wenn Du den letzten slash weglässt nämlich ein
was den FTP-Server wahrscheinlich dazu veranlasst Dir die beschriebene Fehlermeldung zu liefern.

--- Heiko.
nonsenz
User
Beiträge: 14
Registriert: Montag 23. Januar 2006, 15:40

Montag 30. Januar 2006, 13:38

hmmm... bin mir jetzt nicht so recht sicher, ob ich das richtig verstanden habe. heisst das im klartext, es ist mit urllib2 so ohne weiteres nicht möglich, den ftp+pfad zu checken?

danke für die antwort
nons
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 30. Januar 2006, 13:51

Ahemm... Vergiss meine Antwort, ich hab Deine Frage falsch verstanden. Ich dachte es ging Dir darum dass ftp://<blah> den Fehler schmeißt, aber ftp://<blah>/<blubb> nicht.

Das was Du beschreibst: keine Ahnung. Benutz ftplib, ist auch nicht schwer.

--- Heiko.
nonsenz
User
Beiträge: 14
Registriert: Montag 23. Januar 2006, 15:40

Montag 30. Januar 2006, 13:56

naja nur muss ich bei ftplib (wenn ichs richtig verstanden habe) erstmal
den host connecten und dann von hand durch die directories hüpfen.
und das ist mir echt zu anstrengend, dann verwende ich lieber wget (da klappts)

trotzdem danke
nons
Antworten