httpx.InvalidURL: Invalid port

一般是因为设置了 NO_PROXY 环境变量,且使用了 IPv6 掩码,导致 _urlparse.py 中的 normalize_port 方法报错。具体原因参考这个 Github issue

要解决问题只需要在终端中临时 unset NO_PROXY 就行,也可以在你的脚本开头添加 os.environ["NO_PROXY"] = ""

另一个解决方案是直接修改 httpx 源码,但是要记住这并不会让你的 NO_PROXY 以预期的方式工作。

改源码的这个文件 lib/python3.9/site-packages/httpx/_urlparse.py,在 urlparse 方法的开头添加:

def urlparse(url: str = "", **kwargs: typing.Optional[str]) -> ParseResult:
    url = url.replace("::", ":").replace("[","").replace("]","") # 这一行是新加的
    # Initial basic checks on allowable URLs.
    # ---------------------------------------

    # Hard limit the maximum allowable URL length.
    if len(url) > MAX_URL_LENGTH:
        raise InvalidURL("URL too long")

该解决方案参考 只会git clone的程序员

posted @ 2025-07-30 20:52  GOKORURI  阅读(325)  评论(0)    收藏  举报