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