Hola comunidad. Hoy traigo para ustedes un pequeño tutorial que me ha salvado la piel un par de veces. En muchas ocasiones me ha sucedido que he necesitado montar un servidor HTTP mínimo, algo que me deje al menos navegar por mis archivos por la web y esta solución tiene un estilo especial. Ahora mismo la utilizo para montar ocasionalmente el repositorio en mi LAN y funciona perfectamente.
La sencillez de este ejemplo los dejará boquiabiertos. Resulta que está extraido de la propia documentación de Python. No es una solución elegante para mantener un servicio fijo y estable, pero para hacer algo instantáneo y no tener que pasar tiempo configurando un servidor más potente es totalmente bueno.
Un poco de código
Vamos al grano. Utilizaremos la clase SimpleHTTPServer para crear un objeto en Python que sea capaz de manejar peticiones HTTP (SimpleHTTPRequestHandler). Después creamos un servidor utlizando SocketServer y le decimos que maneje sus conexiones utilizando el manejador antes mencionado. Iniciamos el servicio y tenemos un servidor HTTP sirviendo desde la propia carpeta en que hallamos ejecutado el script. Bueno, dejemos que el código se explique por si mismo.
import SimpleHTTPServer import SocketServer PORT = 8000 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever()
Si queremos modificar el comportamiento de nuestro servidor basta con heredar de la clase SimpleHTTPRequestHandler y modificar los métodos que queramos.
Solución instantánea
No obstante a la sencillez del ejemplo anterior, Python nos permite hacerlo incluso más rápido y es que la clase SimpleHTTPServer puede ser instanciada desde la línea de comandos. Exacto, solo una línea en nuestro terminal y tenemos un pequeño servidor HTTP funcionando. Aquí está el ejemplo citado en la documentación:
python -m SimpleHTTPServer 8000
Espero les halla resultado productivo e interesante y los invito a consultar bien a menudo la documentación de Python la cual es en mi opinión una de las documentaciones más completas y amigables que he consultado. Happy hacking!!!
Comentarios ( 10 )
wait, wait, wait. explicotea mejor, so easy?
Bueno una duda el root del servidor cual es? /var/www ?
Wao genial jaja +100 !!!!
@Engel
La raíz es en la misma que se ejecute el comando.
También para quienes gustan de ftp, está: pyftpdlib.
En los repos de Debian y Ubuntu está como python-pyftpdlib. La ejecución básica es:
$ python -m pyftpdlib
Por defecto comparte la carpeta en la que es ejecutado por el puerto 2121, es configurable -ver la ayuda con –help-. En la página del proyecto aparecen varios ejemplos para activar autenticación, etc. Con el parámetro -w se activa el permiso de escritura.
Interesante!!!!!!!
@whippiii
supongo que solo compile python, no?
Los comandos mostrados solo funcionan en Python 2.X. En la versión 3.X según la propia documentación el módulo SimpleHTTPServer fue acoplado en http.server, quedando de la forma `python -m http.server`
Parece que Python es lo que está de moda ahora por acá :/
– PHP 5.4 viene con un webserver básico incluido, de modo que podemos ejecutar `php -S localhost:8000` obteniendo un resultado similar.
– En Ruby esta funcionalidad viene de la mano de `rack` quedando de la forma `ruby -run -e httpd . -p 8000`
@Engel
Es una biblioteca hecha en Python…
@PaToElMundo: Para agilizar la copia desde el servidor con *pyftpdlib*, se puede usar *sendfile*, que permite hacer el envío de archivos directamente desde el kernel sin que se haga la transferencia desde el espacio de usuario hasta el kernel y luego a la red. En Debian y Ubuntu, el paquete se llama: *python-sendfile*. La próxima vez que se ejecute un servidor con *pyftpdlib* tendrá esta función habilitada.
Muy buena solución. Con node es sencillo, sudo npm install -g http-server, y listo, ejecutas http-server donde quieras levantarlo. Saludos.
me quedo una duda sobre esto, como puedo cambiar la carpeta, xq me sale el /home y no quiero compartir esta
Shanks, en la explicación está tu respuesta, en la propia consola cambia el directorio, una vez en él montas el server.
La verdad que el artículo está rompedor, alguien conoce de algún programa para descargar páginas web decente???, porque para descargar el index doy click derecho y ya jajajaja, busco una aplicación que se autentique en cada link de una página y descargue todo el contenido desde la raíz, así puedo descargar toda la documentación de Python en docs.prod.uci.cu sin perder una semana dando ‘clic derecho + Descargar’ jajajaja XD.