【问题标题】:Why HTTPSConnectionPool doesn't work when PoolManager does?为什么 HTTPSConnectionPool 不起作用而 PoolManager 起作用?
【发布时间】:2014-06-11 10:10:20
【问题描述】:

我已经使用 PoolManager 和 HTTPSConnectionPool 测试了一个“POST”请求。第一个有效,另一个给我一个:

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})

对于 HTTPSConnectonPool:

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

【问题讨论】:

  • 我很难将其视为一个编程问题。

标签: python urllib3


【解决方案1】:

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

此外,PoolManagerHTTPSConnectionPool 不在同一个抽象级别。 PoolManager 为您管理 ConnectionPool 实例。

【讨论】:

  • 感谢您的提示!我知道它们是不同的,这就是我首先尝试 HTTPSConnectionPool 的原因(因为我不必管理很多池)。
  • 虽然这是一个很好的答案,并且在这种情况下使用 PoolManager 没有任何缺点是安全的,但如果我们将 HOST 更改为 some.url.com(没有 @ 987654329@).
  • @shazow 这是我第一句话所暗示的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多