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)