Ich schreibe einen einfachen Webserver in Python und war dabei erfolgreich. Ich bin in der Lage, HTML-Seiten in Javascript-Dateien zu rendern, aber keine Bilder zu rendern. Einige der entsprechenden CodePNG-Bild als Antwort in benutzerdefinierten Python-Webserver
,
def createResponse(self, data):#, last_modified=0):
# print data
response_code = data[0]
mimetype = data[1][1]
data = data[1][0] # (200, (data, mimetype))
res = "HTTP/1.0 " + self.config['STATUS_STRING'][str(response_code)] + "\r\n"
res += "Content-Type: " + mimetype + "\r\n"
res += "Date: " + strftime("%a, %d %b %Y %X GMT", gmtime()) + "\r\n"
# if last_modified:
# res += "Last Modified: " + last_modified + "\r\n"
res += 'Server: ' + self.config['SERVER_NAME'] + "\r\n"
res += 'Connection: close' + '\r\n' # signal that the conection wil be closed after complting the request
res += "\r\n"
res += data
return res.encode("utf8")
def _handleGET(self, path):
# some stuff, then
# File exists and read permission, so give file
try:
fp = open(filepath, "rb")
except IOError as e:
if e.errno == errno.EACCES:
return (500, self._readFile(self.config['ERROR_DIR'] + '/' + str(500) + ".html"));
# Not a permission error.
raise
else:
with fp:
return (200, (fp.read().decode("utf8"), mimetypes.guess_type(filepath)[0])) # return (200,(data,mimetype))
ich eine Buchse an den Client, und die Rückkehr der Reaktion unter Verwendung dieses,
clientSocket.sendall(self.createResponse(self._handleGET(data)))
ich die ganze Antwort kodieren, die eine Zeichenfolge , in utf8. Dies funktioniert für HTML-Seiten und js-Dateien und CSS-Dateien, aber nicht für Bilder. (Png, Gif usw.). Ich habe versucht, die Header und Codierung der Antwort von Bildern in base64 binary etc, aber ich bin nicht in der Lage, es zu erreichen.
- Irgendwelche Vorschläge, wie man es macht?
- Ist das sogar möglich, weil ich jetzt denke, es ist nicht möglich, Bilder mit dieser Methode zu rendern, da die Header in
utf8
wären, während der Inhalt der Bilder in anderer Kodierung sein würde. Sie können also nicht verkettet werden. Korrigiere mich, wenn ich falsch liege.
Versuchen Sie nicht, einen http-Server selbst zu schreiben. Verwenden Sie einen Rahmen wie Flasche oder Flasche. – Daniel
Offensichtlich werden die vorgefertigten Server viel besser sein, aber egal, es ist eine gute Lernerfahrung, um selbstständig zu schreiben, was hinter den Kulissen passiert – Keatinge
@PinkeshBadjatiya: Ich bin neugierig. Warum übergibst du 'selbst' als Argument für' _handleGET'? Instanzmethoden sind bereits "self", also sollte es genügen, stattdessen 'self._handleGET (data)' zu verwenden. –