Necesito implementar una aplicación muy simple similar a un servidor web en Python que realizaría solicitudes y respuestas HTTP básicas y mostraría resultados muy básicos en la página web. No estoy demasiado preocupado por la codificación en Python, pero no estoy seguro de por dónde empezar? ¿Cómo configurar esto? Un archivo? ¿Múltiples archivos? Supongo que no tengo ni idea de cómo abordar el hecho de que este es un "servidor", por lo que no estoy familiarizado con la forma de abordar el tratamiento de las solicitudes HTTP/sockets/solicitudes de procesamiento, etc. ¿Algún consejo? Recursos?¿Cómo puedo implementar un servidor web simple usando Python sin usar ninguna biblioteca?
Respuesta
Puede usar socket programming para este fin. El siguiente fragmento crea un socket TCP y escucha en el puerto 9000 para solicitudes http:
from socket import *
def createServer():
serversocket = socket(AF_INET, SOCK_STREAM)
serversocket.bind(('localhost',9000))
serversocket.listen(5)
while(1):
(clientsocket, address) = serversocket.accept()
clientsocket.send("HTTP/1.1 200 OK\n"
+"Content-Type: text/html\n"
+"\n" # Important!
+"<html><body>Hello World</body></html>\n")
clientsocket.shutdown(SHUT_WR)
clientsocket.close()
serversocket.close()
createServer()
iniciar el servidor, $ python server.py
. Abra http://localhost:9000/
en su navegador web (que actúa como cliente). Luego, en la ventana del navegador, puede ver el texto "Hello World" (respuesta http).
EDITAR ** El código anterior fue probado sólo en el cromo, y como ustedes sugirieron sobre otros navegadores, el código se modificó como:
- para que la respuesta http-por igual puede enviar de manera clara encabezado con http versión 1.1, código de estado 200 OK y tipo de contenido text/html.
- El socket del cliente debe cerrarse una vez que se envía la respuesta ya que es un socket TCP.
- Para cerrar adecuadamente el socket de cliente
shutdown()
, tiene que ser llamado socket.shutdown vs socket.close
continuación, el código fue probado en Chrome, Firefox (http://localhost:9000/) y el rizo sencillo en el terminal (rizar http://localhost:9000).
-1. ¿Has intentado esto? Esto no funciona en absoluto; es un servidor de socket, pero no habla HTTP. – Ashe
En realidad, no habla HTTP, por lo que casi todos los navegadores no funcionarían con esto. No funciona en Chrome. Solo funciona en Firefox si presiona el botón Detener. Este no es un servidor web. – Ashe
He copiado el script que lo ejecutó y me aparece un error que dice 'se requiere un objeto tipo byte no 'str'' ¿cómo puedo solucionarlo? – Simon
Debería mirar el módulo SimpleHttpServer (py3: http.server).
Dependiendo de lo que esté tratando de hacer, puede simplemente usarlo o consultar la fuente del módulo (py2, py3) para obtener ideas.
Si desea obtener más bajo nivel, SimpleHttpServer extiende BaseHttpServer (source) para que funcione.
Si desea obtener aún más de bajo nivel, echar un vistazo a SocketServer (fuente: py2, py3).
La gente a menudo ejecutará python como python -m SimpleHttpServer
(o python3 -m http.server
) si solo quieren compartir un directorio: es un servidor completamente funcional y ... simple.
Probablemente diría que primero debe verificar la documentación HTTP. como RFC. – zinking
- 1. Implementar el servicio web java sin usar el servidor web
- 2. ¿Cómo puedo implementar OCR en un sitio web usando PHP?
- 3. ¿Cómo puedo implementar un servidor WebSocket seguro (wss: //) en Python?
- 4. ¿Cómo puedo ejecutar un php sin un servidor web?
- 5. Biblioteca simple del servidor AtomPub
- 6. ¿Cómo implementar una aplicación web python con dependencias usando virtualenv?
- 7. cómo implementar un simple API de Android OAuth y servidor
- 8. Cómo crear un archivo xlsx sin usar ninguna biblioteca de Excel PHP
- 9. ¿Servidor web simple en C++?
- 10. F # biblioteca del servidor web
- 11. ¿Cómo puedo hacer un proxy web MUY simple usando ASP.NET?
- 12. Reproducir un pitido simple con python sin biblioteca externa
- 13. Escribir un servidor web simple en Ruby
- 14. Implementar aplicación web Java simple en Appfog
- 15. ¿Puedo escribir un servidor SOAP usando python espuma?
- 16. ¿Cómo implementar un servidor mínimo para AJAX en Python?
- 17. ¿Cómo puedo iniciar sesión en un sitio web usando Python?
- 18. Cómo escribir un servidor HTTP simple en Haskell usando Network.HTTP.receiveHTTP
- 19. ¿Cómo supera un servidor web python GIL
- 20. ¿Cómo se crea un cliente simple de Google Talk usando la biblioteca Twisted Words Python?
- 21. Creando un archivo XML simple usando python
- 22. Servidor web CGI simple en Python en VMS
- 23. ¿Cuál es la forma más simple de usar SSH Python?
- 24. ¿Cómo implementar un esquema de licencia simple?
- 25. Ejemplo de cliente/servidor RESTFUL simple en Python?
- 26. ¿Cómo escribir un servidor web simple en Erlang?
- 27. Cómo implementar en un solo servidor específico usando Capistrano
- 28. ¿Cómo puedo implementar un geocodificador sin conexión para una sola ciudad usando datos OSM en Android?
- 29. ¿Un buen servidor web de python multiproceso?
- 30. ¿Cómo hacer una transferencia de servidor a servidor sin ninguna interacción del usuario?
Explique aún más sus requisitos (y por qué). ¿Desea implementar la pila completa de nivel de aplicación o puede usar, p. ¿Apache? Explique más lo que necesita * Y por qué. * Finalmente, cuando tiene la etiqueta "websocket", ¿lo dice en serio o simplemente era una etiqueta incorrecta para usar? –
Sin usar * cualquier * bibliotecas? Seguramente 'socket' va a ser necesario como mínimo? – geoffspear
revise la página [esta documentación] (http://docs.python.org/library/simplehttpserver.html), aquí supongo que "cualquier biblioteca" son bibliotecas que no están incluidas en la instalación de python. –