simpleserver servidor modulenotfounderror httpsimpleserver dev create python basehttprequesthandler

python - servidor - Escribir el cuerpo de respuesta con BaseHTTPRequestHandler



python simplehttpserver 8080 (4)

Estoy jugando un poco con Python 3.2.2 y quiero escribir un servidor web simple para acceder a algunos datos de forma remota. Python generará estos datos, por lo que no quiero usar SimpleHTTPRequestHandler, ya que es un servidor de archivos, pero un controlador propio.

Copié un ejemplo de Internet pero estoy atascado porque la cadena de salida de respuesta se niega a escribir el contenido del cuerpo .

Este es mi código:

import http.server import socketserver PORT = 8000 class MyHandler(http.server.BaseHTTPRequestHandler): def do_HEAD(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() print(self.wfile) self.wfile.write("<html><head><title>Title goes here.</title></head>") self.wfile.write("<body><p>This is a test.</p>") # If someone went to "http://something.somewhere.net/foo/bar/", # then s.path equals "/foo/bar/". self.wfile.write("<p>You accessed path: %s</p>" % self.path) self.wfile.write("</body></html>") self.wfile.close() try: server = http.server.HTTPServer((''localhost'', PORT), MyHandler) print(''Started http server'') server.serve_forever() except KeyboardInterrupt: print(''^C received, shutting down server'') server.socket.close()

¿Cuál debería ser un código correcto para escribir el cuerpo de respuesta?

Muchas gracias.

Editar:

El error es:

... File "server.py", line 16, in do_GET self.wfile.write("<html><head><title>Title goes here.</title></head>") File "C:/Python32/lib/socket.py", line 297, in write return self._sock.send(b) TypeError: ''str'' does not support the buffer interface


En Python3, la cadena es un tipo diferente al de Python 2.x. Convertirlo en bytes usando cualquiera

bytes(s, "utf-8")

o

s.encode("utf-8")


Para Python 3, prefija los literales de cadena con una b :

self.wfile.write(b"<foo>bar</foo>")


Solo usa esto en python3.X

self.wfile.write(bytes("<body><p>This is a test.</p>", "utf-8")


basado en su código #comentarios que probablemente esté buscando self.headers.getheaders (''referer''), es decir:

if ''http://www.icamefromthissite.com/'' in self.headers.getheaders(''referer''): do something