HTTPSweet es un servidor HTTP para descargar y subir archivos fácilmente que nos ofrece algunas opciones más interesantes.
Instalación
- Desde paquetes de Python:
$ pip3 install httpsweet
- Desde el repositorio:
$ git clone https://gitlab.com/Zer1t0/httpsweet
$ cd httpsweet/
$ python3 setup.py install
- Y lanzamos el servidor:
$ httpsweet
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) …
Fue creado teniendo en cuenta la flexibilidad, lo que permite su uso en muchas situaciones e implementar la misma operación de muchas formas diferentes.
- Descargar un fichero:
curl 127.0.0.1:8000/test
curl 127.0.0.1:8000/?path=test
curl 127.0.0.1:8000/ -d ‘action=download&path=test’
- Descargar parte de un fichero:
curl ‘127.0.0.1:8000/test?offset=10&size=20’
curl ‘127.0.0.1:8000/?offset=10&size=20&path=test’
curl 127.0.0.1:8000/ -d ‘action=download&offset=10&size=20&path=test’
- Subir un fichero:
curl 127.0.0.1:8000/test_up -H «Content-Type: application/octet-stream» –data ‘thedata’
curl localhost:8000/test_up -H «Content-Type: application/octet-stream» –data-binary «@/etc/hosts»
curl ‘127.0.0.1:8000/test_up?action=upload_file&data=thedata’
- Subir un fichero adjuntando:
curl 127.0.0.1:8000/test_app?append=t -H «Content-type: application/octet-stream» –data «thedata»
curl ‘127.0.0.1:8000/test_app?action=upload_file&data=thedata&append=t’
- Subir encodeado en base64:
curl 127.0.0.1:8000/test_64?encoding=64 -H ‘Content-type: application/octet-stream’ –data ‘dGhlZGF0YQo=’
curl ‘127.0.0.1:8000/?action=upload_file&path=test_64&data=dGhlZGF0YQo&encoding=64’
HTTPS
Además también es compatible con HTTPS, para el cual debe proporcionar un certificado con una clave privada, utilizando los parámetros –cert y –key. En caso de generar un certificado que también incluya la clave privada, solo se debe utilizar el parámetro –cert.
- Para generar un autocertificado automático, podemos usar los siguientes comandos.
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
cat key.pem >> cert.pem # generate cert with the private key
Listado de directorios
- Por defecto el listado de directorios está desactivado, en caso de que queramos activarlos hay que pasarle el parámetro –dir-list.
$ httpsweet –cert cert.pem –dir-list
Enter PEM pass phrase:
Serving HTTPS on 0.0.0.0 port 8000 (https://0.0.0.0:8000/)
Tipos de solicitudes
Para determinar la acción requerida en cada solicitud, el servidor examina las siguientes partes de la solicitud:
- Método
POST | PUT :: Indican la subida
Resto de métodos :: Indican descarga
- URL
Ruta de la URL :: Indica la ruta del archivo deseado
Parámetros de la URL :: Indica los parámetros de la acción
- Cuerpo, que puede ser
Datos brutos :: Indica el contenido del archivo
Parámetros codificados en la URL :: Indica los parámetros de la acción
Datos Json :: Indica los parámetros de la acción
Cabeceras :: Indica los parámetros de la acción
Cookies :: Indica los parámetros de la acción. Dado que la clave de ruta tiene un significado especial en las cookies, no es posible utilizar ese parámetro en estos campos.
Las partes más relevantes son las que se encuentran en las últimas posiciones de la lista. Esto significa, por ejemplo, que si la ruta de la URL indica la ruta index.html, pero hay una ruta de parámetro (en la URL o en el Cuerpo) que indica otro_archivo.txt, entonces se seleccionará otro_archivo.txt como la ruta deseada.
Campos clave-valor (Url, Body, Headers, Cookies)
En todos estos campos que pueden especificar los parámetros de la acción, se pueden proporcionar los siguientes valores:
acción: str :: Determina la acción
path: str :: Indica la ruta del archivo deseado
offset: int :: (Download) Indica el punto de partida para la lectura de un archivo
size: int :: (Download) Indica el número de bytes leídos
append: flag :: (Carga) Indica si los datos deben añadirse al archivo deseado
encoding: str :: Indica el codificador que se desea utilizar en las acciones, actualmente sólo se soporta base64 (o no codificador)
data: str :: (Upload) Los datos a escribir en el archivo deseado
Proyecto: https://github.com/eloypgz/httpsweet