encrypted
🧩 Syntax:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 10 08:57:20 2025
@author: mad24
"""
import requests
import re
def extract_title(html_content):
"""
Una función simple para extraer el título de un HTML usando regex.
No es perfecta, pero funciona para muchos casos sin instalar librerías adicionales.
"""
match = re.search(r'<title>(.*?)</title>', html_content, re.IGNORECASE | re.DOTALL)
if match:
return match.group(1).strip()
return "No se encontró título"
# AFC
ur_login = "https://accounts.claveunica.gob.cl/accounts/login/?next=/openid/authorize%3fclient_id%3de8dde9d26979498786c6ba5a82f70ad3%26redirect_uri%3dhttps%3a%2f%2fapi.afc.cl%3a8443%2fv1%2fcu-afiliado%2fcu-login%26response_type%3dcode%26scope%3dopenid+run+name"
# CMF
url_login = "https://accounts.claveunica.gob.cl/accounts/login/?next=/openid/authorize%3Fclient_id%3D495c261c0f484bd08e232f7358452c4d%26redirect_uri%3Dhttps%253A%252F%252Fwww.cmfchile.cl%252Fsitio%252Fclave_unica%252Fclave_unica.php%253F%2526app%253DPUCTD%26response_type%3Dcode%26scope%3Dopenid%2520run%2520name"
#"%26state%3Da6e0f1caa8fd1190a9991a4947d655f"
#/openid/authorize?client_id=e8dde9d26979498786c6ba5a82f70ad3&redirect_uri=https://api.afc.cl:8443/v1/cu-afiliado/cu-login&response_type=code&scope=openid run name&state="
#W32Wp9qeX&P+VPY
response = requests.get(ur_login, allow_redirects=True)
response.raise_for_status() # Raise an exception for bad status codes
final_url = response.url
final_content = response.text
final_status_code = response.status_code
final_headers = response.headers
print(f"First URL: {final_url}")
print(f"First Status Code: {final_status_code}")
print(f"First Content (partial): {final_content[:200]}...") # Print the first 200 characters
print(f"First Headers: {final_headers}")
csrf_token = final_headers["Set-Cookie"][:42]
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
# AFC
url_inicial = "https://accounts.claveunica.gob.cl/accounts/login/?next=/openid/authorize%3fclient_id%3de8dde9d26979498786c6ba5a82f70ad3%26redirect_uri%3dhttps%3a%2f%2fapi.afc.cl%3a8443%2fv1%2fcu-afiliado%2fcu-login%26response_type%3dcode%26scope%3dopenid+run+name"
# CMF
url_inicial = "https://accounts.claveunica.gob.cl/accounts/login/?next=/openid/authorize%3Fclient_id%3D495c261c0f484bd08e232f7358452c4d%26redirect_uri%3Dhttps%253A%252F%252Fwww.cmfchile.cl%252Fsitio%252Fclave_unica%252Fclave_unica.php%253F%2526app%253DPUCTD%26response_type%3Dcode%26scope%3Dopenid%2520run%2520name%26state%3Da6e0f1caa8fd1190a9991a4947d655f"
#%26state%3Da6e0f1caa8fd1190a9991a4947d655f"
# AFC
data=f"{csrf_token}&next=%2Fopenid%2Fauthorize%3Fclient_id%3De8dde9d26979498786c6ba5a82f70ad3%26redirect_uri%3Dhttps%3A%2F%2Fapi.afc.cl%3A8443%2Fv1%2Fcu-afiliado%2Fcu-login%26response_type%3Dcode%26scope%3Dopenid+run+name%26state%3deyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZmMiLCJjb21wYW55IjoiQUZDIiwiZXhwIjoxNzQ5NTg5MDkyLCJpYXQiOjE3NDk1NjUwOTJ9.xrZDQO9cCqTJdAJ6r8zk1eKapx3MkjPr8lQqvJ_-qqKqG0YJyipd8CPTpDx2vcs-LgIA6smfslQiqtL0h-32ZA&app_name=Sucursal+Virtual+de+AFC&token=&run=25.999.999-1&password=base64paswd"
# CMF
data=f"{csrf_token}&next=%2Fopenid%2Fauthorize%3Fclient_id%3D495c261c0f484bd08e232f7358452c4d%26redirect_uri%3Dhttps%253A%252F%252Fwww.cmfchile.cl%252Fsitio%252Fclave_unica%252Fclave_unica.php%253F%2526app%253DPUCTD%26response_type%3Dcode%26scope%3Dopenid%2520run%2520name%26state%3Da6e0f1caa8fd1190a9991a4947d655f&app_name=Comisi%C3%B3n+para+el+Mercado+Financiero&token=&run=25.999.999-1&password=bas54passws"
#CMF
#state%3Da6e0f1caa8fd1190a9991a4947d655f
s = requests.Session()
print(f"Iniciando petición a: {url_inicial}\n")
response = requests.get(url_inicial, data=data, allow_redirects=True, timeout=10)
response.raise_for_status()
# 1. Revisar el historial de redirecciones
print(f"¡Se detectaron {len(response.history)} redirecciones!\n")
for i, resp_intermedia in enumerate(response.history, 1):
print(f"=============== PASO DE REDIRECCIÓN {i} ================")
print(f"URL Intermedia: {resp_intermedia.url}")
print(f"Código de Estado: {resp_intermedia.status_code}")
# --- ENCABEZADOS ENVIADOS POR NOSOTROS ---
print("\n++++++ Encabezados Enviados en este Paso ++++++")
for key, value in resp_intermedia.request.headers.items():
print(f" {key}: {value}")
print("++++++++++++++++++++++++++++++++++++++++++++++")
# --- RESPUESTA RECIBIDA DEL SERVIDOR ---
print("\n------ Encabezados Recibidos en este Paso ------")
for key, value in resp_intermedia.headers.items():
print(f" {key}: {value}")
print("----------------------------------------------")
cookies_intermedias = resp_intermedia.cookies.get_dict()
print(f"\nCookies recibidas en este paso: {cookies_intermedias if cookies_intermedias else 'Ninguna'}")
titulo_intermedio = extract_title(resp_intermedia.text)
print("--- Realizando petición para obtener cookies ---")
s.get(resp_intermedia.url,verify=False)
print("Cookies ahora en la sesión:", s.cookies.get_dict())
cookies_from_response = s.cookies.get_dict()
print(f"Título de la página: {titulo_intermedio}\n")
# 2. Mostrar la información de la respuesta y petición FINAL
print("================== PETICIÓN Y RESPUESTA FINAL ==================")
print(f"URL Final: {response.url}")
print(f"Código de Estado: {response.status_code}")
# --- ENCABEZADOS ENVIADOS FINALES ---
print("\n+++++ Encabezados Enviados para la Petición Final +++++")
for key, value in response.request.headers.items():
print(f" {key}: {value}")
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++")
# --- RESPUESTA RECIBIDA FINAL ---
print("\n--------- Encabezados Recibidos Finales ---------")
for key, value in response.headers.items():
print(f" {key}: {value}")
print("---------------------------------------------")
final_cookies = response.cookies.get_dict()
print(f"\nCookies finales: {final_cookies if final_cookies else 'Ninguna'}")
print("--- Realizando petición para obtener cookies ---")
s.get(response.url,verify=False)
print("Cookies ahora en la sesión:", s.cookies.get_dict())
cookies_from_response = s.cookies.get_dict()
response = requests.post(url_inicial,data=data, headers=headers, allow_redirects=True, verify=False)
response.raise_for_status() # Raise an exception for bad status codes
final_url = response.url
final_content = response.text
final_status_code = response.status_code
final_headers = response.headers
print(f"Final URL: {final_url}")
print(f"Final Status Code: {final_status_code}")
print(f"Final Content (partial): {final_content[:200]}...") # Print the first 200 characters
print(f"Final Headers: {final_headers}")
print("--- Realizando primera petición para obtener cookies ---")
s.get(final_url,verify=False)
print("Cookies ahora en la sesión:", s.cookies.get_dict())
cookies_from_response = s.cookies.get_dict()
print("Details of all cookies received:")
for cookie in cookies_from_response:
print(cookie)
#print(f" Name: {cookie.name}")
#print(f" Value: {cookie.value}")
#print(f" Domain: {cookie.domain}")
#print(f" Path: {cookie.path}")
#print(f" Expires: {cookie.expires}") # This is a timestamp
#print("-" * 20)