Seite 1 von 1

Python img Download - HTTP Error 404: Not Found

Verfasst: Montag 19. August 2019, 06:10
von Asthos
Hallo liebe Forenmitglieder,

folgendes Problem:
auf dem Rechner (BS: Linux mint 19.2) habe ich die Python IDE Pycharm 2019.2 mit python3.6 installiert.
Hier funktioniert das downloaden einer image-Datei eines bestimmten Servers ohne Probleme:

Code: Alles auswählen

from urllib.request import urlretrieve
image_url = 'http://11.11.111.11/unterordner/unterordner/unterordner/Bild.jpg'
file_name = '1.jpg'
urlretrieve(image_url, file_name)
wenn ich nun via Diskstation von Synology die .py Datei einplane, bricht diese Verarbeitung immer ab.
Nach ein wenig suchen konnte ich zumindest den genaueren Fehler per Exception ausgeben:
"HTTP Error 404: Not Found"
dies ist sehr mysteriös, da die URL im Browser (Firefox) immer das Bild zeigt.

Probiert habe ich neben urlretrieve auch mal einfach das Modul urlopen von urllib.request und dabei mal den header geändert um zu sehen, ob die Seite auch so mal geöffnet werden kann.
(Auf dem Rechner ging es wieder mal ohne Probleme)

Code: Alles auswählen

import utllib
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0'
url='http://.....'
req = urllib.request.Request(url, headers = headers)
try:
    resp = urllib.request.urlopen(req)
except Exception as e:
    print(str(e))
(den User-Agent hatte ich mir aus dem Firefox kopiert)
Leider kein Erfolg auf der Diskstation. Auch den gesamten Header von Firefox hatte ich mal versucht zu nutzen, auch kein Erfolg ...
Somit konnte ich auch das Modul shutil für die Erstellung einer Bild-Datei nicht nutzen.

Im Grunde funktioniert aber das Modul urlretrieve auch auf der DS, da z.B. das Bild:
ext/planetstyles/flightdeck/store/site_logo.gif
heruntergeladen werden konnte (hier ist die Endung, ob .jpg / .gif oder .png unerheblich):

Code: Alles auswählen

from urllib.request import urlretrieve
image_url = 'https://www.python-forum.de/ext/planetstyles/flightdeck/store/site_logo.gif'
file_name = '1.gif'
urlretrieve(image_url, file_name)
Also alles sehr mysteriös. Und auf Python 2.7 wollt ich nicht umsteigen, da dies eher ein Auslaufmodell sein wird.
Nichts desto trotz habe ich auch versucht, mit dem Modul "Requests" eine Verbindung herzustellen (hier war das "installieren des Moduls" auf der DS ganz schön tricky),
aber auch hier: kein Erfolg.

Daher wende ich mich mal an Euch.
Vielleicht hat noch jemand eine Idee.

Re: Python img Download - HTTP Error 404: Not Found

Verfasst: Sonntag 8. September 2019, 09:16
von Asthos
Hm, hat keiner hier eine Idee, wie man das sonst noch so angehen kann?

Es liegt vorerst an der Funktion "urlopen" was den Fehler 404 verursacht.
Ich denke aber dass serverseitig eine Art "Schutzmechanismus" gegen Anfragen aus einer Diskstation existieren.
Gibt es sonst weitere Möglichkeiten den "header" anders zu befüllen, außer mit dem 'USER_AGENT', so dass der Server denkt, dass er von einem anderen Client abgefragt wird?

Re: Python img Download - HTTP Error 404: Not Found

Verfasst: Sonntag 8. September 2019, 09:46
von __blackjack__
Du verrätst ja die URL nicht wirklich – kann es sein das die IP oder Domain die da angegeben wird auf der Diskstation auf einen anderen Rechner aufgelöst wird als auf Deinem Linuxrechner? Gibst Du da eine IP oder einen Domainnamen an? Falls IP ist das eine da draussen im grossen weiten Netz oder ein lokales Netz? Falls lokal – ist es das gleiche Netz in dem auch Dein Linuxrechner ist?

Re: Python img Download - HTTP Error 404: Not Found

Verfasst: Sonntag 8. September 2019, 10:09
von nezzcarth
Bietet die Diskstation die Möglichkeit, sich per SSH oder notfalls Telnet direkt einzuloggen?
Dann kannst du mal versuchen, die Requests händisch zu Diagnosezwecken zu senden und die genauen
Response Header ansehen. Z.B. per Curl (falls vorhanden):

curl -sLD - 'http://wikipedia.org' -o /dev/null

Oder aus einer interaktiven Python-Session heraus. Ansonsten kannst du eine solche Funktionalität
auch in dein Skript einbauen.