{"id":24833,"library":"whoisit","title":"whoisit","description":"A Python client for RDAP WHOIS-like services for internet resources (domains, IPs, ASNs). The current version is 4.0.3, requires Python >=3.10. Releases occur irregularly, with several bug fixes and feature updates per year.","status":"active","version":"4.0.3","language":"python","source_language":"en","source_url":"https://github.com/meeb/whoisit","tags":["rdap","whois","domain","ip","asn","internet-resources"],"install":[{"cmd":"pip install whoisit","lang":"bash","label":"Latest stable release"}],"dependencies":[{"reason":"HTTP requests to RDAP servers","package":"requests","optional":false},{"reason":"Querying JSON responses from RDAP","package":"jmespath","optional":false}],"imports":[{"note":null,"wrong":null,"symbol":"whoisit","correct":"import whoisit"},{"note":"errors is a module, not an attribute; must import explicitly","wrong":"import whoisit.errors","symbol":"RDAPError","correct":"from whoisit import errors"}],"quickstart":{"code":"import whoisit\n\n# Bootstrap the RDAP servers (required once, e.g., at app start)\nwhoisit.bootstrap()\n\n# Query a domain\nresult = whoisit.domain('example.com')\nprint(result.get('handle'))\nprint(result.get('name'))\n\n# Query an IP\nip_result = whoisit.ip('8.8.8.8')\nprint(ip_result.get('handle'))\n\n# Query an ASN\nasn_result = whoisit.asn('15169')\nprint(asn_result.get('handle'))\n","lang":"python","description":"Simple example: bootstrap the RDAP server list and query a domain, IP, and ASN."},"warnings":[{"fix":"Upgrade Python to 3.10+ or pin to whoisit<4.0.0 if stuck on 3.9.","message":"In v4.0.0, the library dropped Python 3.9 support. Requires Python >=3.10.","severity":"breaking","affected_versions":">=4.0.0"},{"fix":"Call `whoisit.bootstrap()` at the start of your application, optionally with a bootstrap URL argument.","message":"The function `whoisit.bootstrap()` must be called before any queries. Otherwise, queries will fail with a `NotBootstrappedError`.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Set a custom timeout via `whoisit.set_default_timeout(seconds)` before queries.","message":"The `whoisit.domain()` function will follow RDAP redirects automatically, but it may take several seconds for some TLDs (e.g., .us). The default timeout may cause delays.","severity":"gotcha","affected_versions":"all"},{"fix":"Use `from whoisit import errors` and then `errors.RDAPError`.","message":"In v3.x, the `whoisit.errors` module was restructured. Direct attribute access like `whoisit.errors.RDAPError` may break; import explicitly instead.","severity":"deprecated","affected_versions":">=3.0.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Call `whoisit.bootstrap()` before using `whoisit.domain()`. The functions are attached after bootstrap.","cause":"The namespace changed in v3.x; you must call `whoisit.bootstrap()` first or import incorrectly.","error":"AttributeError: module 'whoisit' has no attribute 'domain'"},{"fix":"Add `whoisit.bootstrap()` once at the start of your program.","cause":"You forgot to call `whoisit.bootstrap()` before querying.","error":"whoisit.errors.NotBootstrappedError: Bootstrap not completed."},{"fix":"Ensure the resource name is valid and you have internet connectivity. You can also set a user-agent via `whoisit.set_user_agent('...')`.","cause":"The RDAP server returned an HTML error page, often due to a bad URL or network issue.","error":"json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"},{"fix":"Convert sets to lists manually: `result['emails'] = list(result.get('emails', []))` before JSON serialization.","cause":"Some parsed data (e.g., email addresses) are returned as sets instead of lists, causing serialization errors.","error":"TypeError: Object of type 'set' is not JSON serializable"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}