Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 32 additions & 6 deletions 1a/ej1a3.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
"""
Método que se ejecuta cuando se recibe una petición GET.

Rutas implementadas:
- `/ip`: Devuelve la IP del cliente en formato JSON

Expand All @@ -41,9 +41,24 @@ def do_GET(self):
# 3. Si la ruta es cualquier otra, envía una respuesta 404

# PISTA: Para obtener la IP del cliente puedes usar el método auxiliar _get_client_ip()
pass


if self.path == "/ip":
# Get client IP
client_ip = self._get_client_ip()

#Prepare JSON response
response_data = {"ip": client_ip}
response_json = json.dumpls(response_data)

# Send response
self.send_rsponse(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(response_json.encode('utf-8'))
else:
#Handle 404 for any other path
self.response(404)
self.end_headers()

def _get_client_ip(self):
"""
Método auxiliar para obtener la IP del cliente desde los encabezados.
Expand All @@ -57,9 +72,20 @@ def _get_client_ip(self):
# 1. Verifica si existe el encabezado 'X-Forwarded-For' (común en servidores con proxy)
# 2. Si no existe, verifica otros encabezados comunes como 'X-Real-IP'
# 3. Como último recurso, utiliza self.client_address[0]
pass


#Check X-Forwarded-For header first
forwarded_for = self.headers.get('X-Forwarded-For')
if forwarded-for:
#Return the first IP in the list
return forwarded_for.split(',')[0].strip()
#Check X-Real-IP header
real_ip = self.headers.get('X-Real-IP')
if real_ip:
return real_ip

# Fall back to direct client address
return self.client_address[0]

def create_server(host="localhost", port=8000):
"""
Crea y configura el servidor HTTP
Expand Down