HTTP Python Sockets // Bild Downloaden?

2 Antworten

Die 'Antwort' des Severs beinhaltet natürlich Header etc. - wenn müßtest Du also das Protokoll korrekt implementieren und nebenbei auch noch Fehlersituationen behandeln.

Oder Du nimmst gleich:

https://docs.python.org/3/library/http.client.html

Wenn es mit Bordmitteln sein soll.


TimeTravel3 
Beitragsersteller
 23.05.2022, 23:10

Einmal die ganze frage & den code lesen und es hätte sich geklärt.

KarlRanseierIII  24.05.2022, 01:13
@TimeTravel3

Na dann, viel Erfolg beim Debuggen.

Ich würde ja damit anfangen zu schauen, ob der Body wirklich komplett in der Datei gelandet ist.

response = client.recv(4096).split(b'\r\n')

Hast du dir das mal ausgeben lassen? Was steht dabei in den einzelnen Array-Elementen? Ruf dir noch mal ins Gedächtnis, wie eine HTTP Response aussieht. Ist dein Buffer groß genug?

file.write(response[len(response) - 1])

Dann wirst du erkennen, dass hier eben nicht nur die Binärdaten des Bildes ins PNG geschrieben werden, sondern der komplette HTTP Request. Inklusive Header und Zeugs, das nicht in ein PNG gehört.

Dass da ÜBERHAUPT etwas bei raus kommt, das man in nem Bildbetrachter sehen kann, erstaunt mich.

Woher ich das weiß:Berufserfahrung – Berufserfahrung

TimeTravel3 
Beitragsersteller
 23.05.2022, 17:47

"Hast du dir das mal ausgeben lassen?" Ja, habe es auch mal mit 1000000 probiert. "Dann wirst du erkennen, dass hier eben nicht nur die Binärdaten des Bildes ins PNG geschrieben werden, sondern der komplette HTTP Request. Inklusive Header und Zeugs, das nicht in ein PNG gehört." Ich nutze ja auch nur den letzen teil der response, der den das bild behinhaltet. "sondern der komplette HTTP Request. Inklusive Header und Zeugs, das nicht in ein PNG gehört." Nein, man sieht doch den array mit der Antwort des Servers, dort sieht man das der letze teil Die bild daten sind.

TheQ86  23.05.2022, 17:52
@TimeTravel3

Hm. Stimmt, du schreibst nur das letzte array-Element rein. Aber ist das alles? Weil wenn du noch irgendwo mal ein \r\n hast das noch zum body des requests gehört, dann hast du vielleicht doch nicht alles gespeichert.

TheQ86  23.05.2022, 18:01
@TimeTravel3

Was mir aber noch auffällt, der Server gibt dir den Content-Type image/jpeg zurück. Du speicherst das in ner PNG-Datei. Da weiß ich jetzt nicht, wie intelligent da das Betriebssystem oder der Image Viewer ist.