2011-06-17 1 views
3

Je souhaite étendre SimpleHTTPRequestHandler et remplacer le comportement par défaut do_GET(). Je renvoie une chaîne de mon gestionnaire personnalisé, mais le client ne reçoit pas la réponse.SimpleHTTPRequestHandler Override do_GET

Voici ma classe de gestionnaire:

DUMMY_RESPONSE = """Content-type: text/html 

<html> 
<head> 
<title>Python Test</title> 
</head> 

<body> 
Test page...success. 
</body> 
</html> 
""" 

class MyHandler(CGIHTTPRequestHandler): 

    def __init__(self,req,client_addr,server): 
     CGIHTTPRequestHandler.__init__(self,req,client_addr,server) 

    def do_GET(self): 
     return DUMMY_RESPONSE 

Que dois-je changer pour faire ce travail correctement?

Répondre

9

Quelque chose comme (code non testé):

def do_GET(self): 
    self.send_response(200) 
    self.send_header("Content-type", "text/html") 
    self.send_header("Content-length", len(DUMMY_RESPONSE)) 
    self.end_headers() 
    self.wfile.write(DUMMY_RESPONSE) 
+0

Muchas gracias! J'ai également supprimé l'en-tête 'Content-type' de ma chaîne' DUMMY_RESPONSE', mais sinon cela fonctionne tel quel. Bon travail. –

0

Les travaux de réponse ci-dessus, mais vous pourriez obtenir TypeError: a bytes-like object is required, not 'str' sur cette ligne: self.wfile.write(DUMMY_RESPONSE). Vous devez faire ceci: self.wfile.write(str.encode(DUMMY_RESPONSE))