python-socks icon indicating copy to clipboard operation
python-socks copied to clipboard

Added argument - custom proxy Resolver (for Asyncio)

Open MKiwi opened this issue 2 years ago • 0 comments

This is prerequisite to use aiohttp with Custom DNS resolver.

import socket
import asyncio
import aiohttp

from aiohttp_socks import ProxyType, ProxyConnector
from python_socks.async_.asyncio._resolver import Resolver
from aiohttp import AsyncResolver

class CustomResolver(Resolver):

    def __init__(self, loop: asyncio.AbstractEventLoop):
        super().__init__(loop)
        self.resolver = AsyncResolver(loop, nameservers=['208.67.222.123'], udp_port=5353)

    async def resolve(self, host, port=0, family=socket.AF_UNSPEC):
        hosts = await self.resolver.resolve(host, port, family)
        return '', hosts[0]['host']

async def main():
    loop = asyncio.get_event_loop()
    resolver = CustomResolver(loop)
    proxy_host = '199.102.104.70'
    proxy_port = 4145

    connector = ProxyConnector(proxy_type=ProxyType.SOCKS5,
                               host=proxy_host,
                               port=proxy_port,
                               rdns=False,
                               proxy_resolver=resolver,
                               ssl=False
                               )
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get("http://ipapi.co/json") as resp:
            print(await resp.json())


if __name__ == '__main__':
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())

MKiwi avatar Jan 08 '24 15:01 MKiwi