{"record":{"id":"e9e816ba83e71340","repo":"NanmiCoder/MediaCrawler","slug":"unknown-proxy-provider-config-ip-proxy-provider","errorCode":null,"errorMessage":"Unknown proxy provider: '{config.IP_PROXY_PROVIDER_NAME}'. Valid options: {list(IpProxyProvider.keys())}","messagePattern":"Unknown proxy provider: '(.+?)'\\. Valid options: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"proxy/proxy_ip_pool.py","lineNumber":207,"sourceCode":"\n\nIpProxyProvider: Dict[str, ProxyProvider] = {\n    ProviderNameEnum.KUAI_DAILI_PROVIDER.value: new_kuai_daili_proxy(),\n    ProviderNameEnum.WANDOU_HTTP_PROVIDER.value: new_wandou_http_proxy(),\n    ProviderNameEnum.STATIC_PROVIDER.value: StaticProxyProvider(),\n}\n\n\nasync def create_ip_pool(ip_pool_count: int, enable_validate_ip: bool) -> ProxyIpPool:\n    \"\"\"\n    Create IP proxy pool\n    :param ip_pool_count: Number of IPs in the pool\n    :param enable_validate_ip: Whether to enable IP proxy validation\n    :return:\n    \"\"\"\n    ip_provider = IpProxyProvider.get(config.IP_PROXY_PROVIDER_NAME)\n    if ip_provider is None:\n        raise ValueError(\n            f\"Unknown proxy provider: '{config.IP_PROXY_PROVIDER_NAME}'. \"\n            f\"Valid options: {list(IpProxyProvider.keys())}\"\n        )\n    is_static = config.IP_PROXY_PROVIDER_NAME == ProviderNameEnum.STATIC_PROVIDER.value\n    pool = ProxyIpPool(\n        ip_pool_count=ip_pool_count,\n        enable_validate_ip=False if is_static else enable_validate_ip,\n        ip_provider=ip_provider,\n    )\n    await pool.load_proxies()\n    return pool\n\n\nif __name__ == \"__main__\":\n    pass\n","sourceCodeStart":189,"sourceCodeEnd":223,"githubUrl":"https://github.com/NanmiCoder/MediaCrawler/blob/d6f7c5bb906b6dac40ddf343ef9e26438a3de092/proxy/proxy_ip_pool.py#L189-L223","documentation":"Raised by create_ip_pool() when config.IP_PROXY_PROVIDER_NAME is not a key in the IpProxyProvider registry dict. This is a configuration error at startup: the configured proxy provider name does not match any registered provider factory. The message lists all valid keys.","triggerScenarios":"Setting IP_PROXY_PROVIDER_NAME to an unregistered value (typo, wrong case, or a provider whose dependencies aren't installed), or leaving it set to a name that only exists in a different fork/version of the project.","commonSituations":"Typos like 'kdl' vs 'kuaidaili' or 'wandouproxy' vs 'wandou'; upgrading MediaCrawler versions where provider names were renamed; copying a config from a fork with extra providers.","solutions":["Check the error message — it prints the exact list of valid names, e.g. ['kuaidaili', 'wandou', 'static']","Set IP_PROXY_PROVIDER_NAME in config/base_config.py (or env) to one of those exact, case-sensitive strings","To run without a paid proxy provider, use the static/no-proxy provider entry","After renaming, restart the process — the check runs once at pool creation"],"exampleFix":"// before\nIP_PROXY_PROVIDER_NAME = \"kdl\"\n\n// after\nIP_PROXY_PROVIDER_NAME = \"kuaidaili\"  # must match a key in IpProxyProvider","handlingStrategy":"validation","validationCode":"from proxy.proxy_ip_pool import IpProxyProvider\n\nassert config.IP_PROXY_PROVIDER_NAME in IpProxyProvider, (\n    f\"IP_PROXY_PROVIDER_NAME must be one of {list(IpProxyProvider)}\"\n)\npool = await create_ip_pool(...)","typeGuard":"def is_known_provider(name: str) -> bool:\n    return isinstance(name, str) and name in IpProxyProvider","tryCatchPattern":"try:\n    pool = await create_ip_pool(n, True)\nexcept ValueError as e:\n    # message already lists valid options; surface it to the user\n    raise SystemExit(f\"config error: {e}\") from e","preventionTips":["Validate provider name at process start, not first crawl","Use the exact strings from the error's valid-options list","For proxy-free runs use the static provider entry"],"tags":["configuration","proxy","startup"],"backgroundTag":null,"analyzedSha":"d6f7c5bb906b6dac40ddf343ef9e26438a3de092","analyzedAt":"2026-08-15T01:39:07.505Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}