import asyncio
import os
import ssl
import aiohttp

async def main():
    proxy_headers = {
        "Proxy-Authorization": aiohttp.encode_basic_auth(
            os.environ["PROXY_USERNAME"], os.environ["PROXY_PASSWORD"]
        )
    }
    tls = ssl.create_default_context(cafile=os.environ.get("PROXY_TEST_CA"))
    timeout = aiohttp.ClientTimeout(total=15, connect=5)
    target = os.environ.get("TARGET_URL", "https://api.ipify.org?format=json")
    try:
        async with aiohttp.ClientSession(trust_env=False, timeout=timeout) as session:
            async with session.get(
                target,
                proxy=os.environ["PROXY_SERVER"],
                proxy_headers=proxy_headers,
                ssl=tls,
                allow_redirects=False,
            ) as response:
                response.raise_for_status()
                print(await response.json())
    except (aiohttp.ClientError, asyncio.TimeoutError) as error:
        print("Request failed:", type(error).__name__)
        raise SystemExit(1)

asyncio.run(main())
