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的程序员

浙公网安备 33010602011771号