为什么HTTPSConnectionPool不工作而PoolManager却能?

5 投票
1 回答
6023 浏览
提问于 2025-04-18 09:24

我测试了一个 'POST' 请求,使用了 PoolManager 和 HTTPSConnectionPool 两种方式。第一种方式可以正常工作,而第二种方式却给我报了一个错误:

urllib3.exceptions.MaxRetryError: 
HTTPSConnectionPool(host='https://some.url.com', port=443): 
Max retries exceeded with url: /some-api (Caused by <class 'socket.gaierror'>:
[Errno -2] Name or service not known)

这是我用 PoolManager 写的代码:

import urllib3

HOST = 'https://some.url.com'
PORT = 443
PATH = '/some-api'
xml_request = '<some xml tree/>'

manager = urllib3.PoolManager()
res = manager.request('POST', HOST+PATH, {'req':xml_request})

这是我用 HTTPSConnectionPool 写的代码:

manager = urllib3.HTTPSConnectionPool(HOST, port=PORT)
res = manager.request('POST', PATH, {'req':xml_request})

1 个回答

5

https://some.url.com 不是一个主机名或IP地址,而是一个网址。所以你给 HTTPSConnectionPool 提供了错误的信息。

另外,PoolManagerHTTPSConnectionPool 的层次不一样。PoolManager 是用来管理 ConnectionPool 实例的。

撰写回答