Implement an async mode
As all remote interactions from whoisit are just basic HTTP requests, with the exception of the additional custom SSL handshake options, an interface should be added to expose an async mode. aiohttp would be a reasonably low overhead drop-in replacement for the current requests sessions. This would add an extra dependency on aiohttp and that aiohttp has compiled extensions so async mode would need to be opt-in to maintain pure Python support.
@meeb I would like to work on a PR for this, is this something you would be interested in working on together/is this already being worked on?
Thanks for the offer! You're welcome to attempt to work on a PR for this and I'm happy to accept any well formatted contributions. I've been bottle-necked with other work for some time. What I was planning on doing for this was use aiohttp as a drop-in for requests in https://github.com/meeb/whoisit/blob/main/whoisit/utils.py to provide async support, which is pretty straight forward.
The complication here is the requirement to support an optional decrease in SSL cipher suite strength to accommodate some of the more esoteric and legacy RDAP endpoints that exist (support for the allow_insecure=True whoisit argument).
Most of the time for this issue is going to be spent on regression testing, test suites and reading into the internals of aiohttp rather than just switching out requests.get(...) for async aiohttp_session.get(...).
From memory I believe this is going to be replacing the requests HTTPAdapter with an aiohttp TCPConnector with a custom SSL context. This also requires creating the SSL context without using the create_urllib3_context(...) wrapper as urllib3 would be dropped when aiohttp is switched in.
Thanks to @sam-kleiner this is now implemented in the new v3.0.0 release.