Created
December 3, 2025 10:00
-
-
Save ioritz1993/3faad5b08a118a7464305eb10a060cf9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python | |
| import argparse | |
| import http.server | |
| import os | |
| class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): | |
| def _print_headers(self, method): | |
| print(f"\n--- Encabezados (Headers) de la Solicitud {method} ---") | |
| for header, value in self.headers.items(): | |
| print(f" {header}: {value}") | |
| print("------------------------------------------------------\n") | |
| def do_GET(self): | |
| self._print_headers("GET") | |
| super().do_GET() | |
| def do_PUT(self): | |
| self._print_headers("PUT") | |
| path = self.translate_path(self.path) | |
| if path.endswith('/'): | |
| self.send_response(405, "Method Not Allowed") | |
| self.wfile.write("PUT not allowed on a directory\n".encode()) | |
| return | |
| else: | |
| try: | |
| # Intenta crear el directorio si no existe | |
| os.makedirs(os.path.dirname(path)) | |
| except FileExistsError: | |
| pass | |
| if 'Content-Length' not in self.headers: | |
| self.send_error(411, "Length Required") | |
| return | |
| length = int(self.headers['Content-Length']) | |
| try: | |
| with open(path, 'wb') as f: | |
| f.write(self.rfile.read(length)) | |
| self.send_response(201, "Created") | |
| self.end_headers() | |
| except Exception as e: | |
| print(f"Error en PUT: {e}") | |
| self.send_error(500, "Internal Server Error") | |
| if __name__ == '__main__': | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('--bind', '-b', default='0.0.0.0', metavar='ADDRESS', | |
| help='Specify alternate bind address ' | |
| '[default: all interfaces]') | |
| parser.add_argument('port', action='store', | |
| default=8000, type=int, | |
| nargs='?', | |
| help='Specify alternate port [default: 8000]') | |
| args = parser.parse_args() | |
| print(f"Iniciando servidor en http://{args.bind}:{args.port}...") | |
| try: | |
| http.server.test(HandlerClass=HTTPRequestHandler, port=args.port, bind=args.bind) | |
| except KeyboardInterrupt: | |
| print("\nServidor detenido por el usuario.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment