Skip to content

Instantly share code, notes, and snippets.

@ioritz1993
Created December 3, 2025 10:00
Show Gist options
  • Select an option

  • Save ioritz1993/3faad5b08a118a7464305eb10a060cf9 to your computer and use it in GitHub Desktop.

Select an option

Save ioritz1993/3faad5b08a118a7464305eb10a060cf9 to your computer and use it in GitHub Desktop.
#!/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