2017-02-20 7 views
0

Ich habe diesen Server online gefunden und habe ihn ein wenig bearbeitet. Hier ist der Code:Cache in einem Python-HTTP-Server entfernen

from http.server import BaseHTTPRequestHandler, HTTPServer 
from xml.dom import minidom 
import os 


class MyHandler(BaseHTTPRequestHandler): 
    def do_POST(self): 
     self.data_string = self.rfile.read(int(self.headers['Content-Length'])) 
     self.send_response(200) 
     self.end_headers() 
     valore = str(self.data_string)[2:-1] 
     response = ["",""] 
     response[0],response[1] = processData(valore) 
     if response[0] == 1: 
      sep = "" 
      message = "" 
      for res in response[1]: 
       message += res 
      response = sep.join(message) 
      self.wfile.write(bytes(message, "utf-8")) 

    def do_GET(self): 
     # Send response status code 
     self.send_response(200) 
     # Send headers 
     if self.path.endswith("html"): 
      self.send_header('Content-type', 'text/html') 
      self.end_headers() 
     elif self.path.endswith("css"): 
      self.send_header('Content-type', 'text/css') 
      self.end_headers() 
     elif self.path.endswith("js"): 
      self.send_header('Content-type', 'application/javascript') 
      self.end_headers() 
     elif self.path.endswith(".ico"): 
      print(self.rawpath) 
     if not self.path.endswith("jpeg") and not self.path.endswith("jpg") and not self.path.endswith("png") and not self.path.endswith("gif"): 
      with open(self.path[1:], 'r') as myfile: 
       data = myfile.read() 
      # Write content as utf-8 data 
      self.wfile.write(bytes(data, "utf8")) 
     if self.path.endswith("jpeg"): 
      f = open(self.path[1:], 'rb') 
      self.send_response(200) 
      self.send_header('Content-type', 'image/jpeg') 
      self.end_headers() 
      self.wfile.write(f.read()) 
      f.close() 
     elif self.path.endswith("png"): 
      f = open(self.path[1:], 'rb') 
      self.send_response(200) 
      self.send_header('Content-type', 'image/png') 
      self.end_headers() 
      self.wfile.write(f.read()) 
      f.close() 
     elif self.path.endswith("gif"): 
      f = open(self.path[1:], 'rb') 
      self.send_response(200) 
      self.send_header('Content-type', 'image/gif') 
      self.end_headers() 
      self.wfile.write(f.read()) 
      f.close() 
     elif self.path.endswith("jpg"): 
      f = open(self.path[1:], 'rb') 
      self.send_response(200) 
      self.send_header('Content-type', 'image/jpeg') 
      self.end_headers() 
      self.wfile.write(f.read()) 
      f.close() 
     return 

def run(): 
    print('starting server...') 

    # Server settings 
    # Choose port 8080, for port 80, which is normally used for a http server, you need root access 
    server_address = ('192.168.2.245', 8081) 
    httpd = HTTPServer(server_address, MyHandler) 
    print('running server...') 
    httpd.serve_forever() 


def processData(data): 
    XMLlist = [] 
    data = data.split(":") 
    if data[0] == "XMLlist": 
     path = os.path.realpath(__file__) 
     path = os.path.dirname(path) 
     for filename in os.listdir(path): 
      if filename.endswith('.xml'): 
       XMLlist.append(filename[:-3]) 
     return 1,XMLlist 
       #fullname = os.path.join(path, filename) 
    else: 
     file = open('default.xml', 'r') 
     tree = minidom.parse(file) 
     tree.getElementsByTagName(data[0])[0].childNodes[0].replaceWholeText(data[1]) 
     file = open('default.xml', 'w') 
     tree.writexml(file) 
     file.close() 
     return 0, 1 


run() 

Der Server funktioniert gut und ich brauche Cache zu entfernen. Wenn ich versuche, ein Bild von der HTML-Seite mit dem gleichen Namen zu aktualisieren, gibt der Server mir das zwischengespeicherte Bild zurück ... Hast du einen Ratschlag?

Vielen Dank und sorry für mein Englisch ...

Antwort

0

Schließen Sie den Browser, indem Sie Strg + F5 oder Shift + F5

+0

Ja aufzufrischen, aber den Cache aus der nicht deaktivieren Server ... Ich möchte, dass der Server keinen Cache speichert ... ist das möglich? –

+0

'self.send_header ('Cache-Kontrolle', 'no-store, no-cache, muss-revalidate, nach-check = 0, pre-check = 0')' – StefansArya

+0

es wird verhindern, zwischenspeichern, tue ich nicht Think Python wird Dateien zwischenspeichern. Haben Sie versucht, den Server zu aktualisieren? – StefansArya

Verwandte Themen