无法连接到 python 中的特定 URL
Can't connect to a specific URL in python
我正在尝试连接到 Python 中的 Heathrow rewards 站点。我正在尝试使用 RoboBrowser
库从页面中抓取数据,但我的连接尝试引发了 ReadTimeout
错误。我用过的所有其他 URL(即 Waterstones、Maximiles)都运行良好。
我已经尝试连接 requests
和 urllib
库,并且两者都得到了相同的结果。
我认为这个问题与 SSL 验证有关,所以我将其关闭,但它并没有改变任何东西。
您应该能够通过连接到我提到的其中一个库中的 URL 来自己重现该问题。
from robobrowser import RoboBrowser
browser = RoboBrowser()
browser.open('https://rewards.heathrow.com')
正如对该问题的评论所暗示的,这是一个 SSL 版本问题。解决方案是创建一个适配器 class,如下所示:Choosing The SSL Version In Python Requests.
我用来修复问题的代码如下:
class SSLAdapter(HTTPAdapter):
def __init__(self, ssl_version=None, **kwargs):
self.ssl_version = ssl_version
self.poolmanager = PoolManager()
super().__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=self.ssl_version)
然后,在创建 RoboBrowser 实例时:
s = Session()
s.mount('https://', SSLAdapter(_ssl.PROTOCOL_TLSv1))
self.browser = RoboBrowser(parser="lxml", session=s, user_agent=user_agent)
我正在尝试连接到 Python 中的 Heathrow rewards 站点。我正在尝试使用 RoboBrowser
库从页面中抓取数据,但我的连接尝试引发了 ReadTimeout
错误。我用过的所有其他 URL(即 Waterstones、Maximiles)都运行良好。
我已经尝试连接 requests
和 urllib
库,并且两者都得到了相同的结果。
我认为这个问题与 SSL 验证有关,所以我将其关闭,但它并没有改变任何东西。
您应该能够通过连接到我提到的其中一个库中的 URL 来自己重现该问题。
from robobrowser import RoboBrowser
browser = RoboBrowser()
browser.open('https://rewards.heathrow.com')
正如对该问题的评论所暗示的,这是一个 SSL 版本问题。解决方案是创建一个适配器 class,如下所示:Choosing The SSL Version In Python Requests.
我用来修复问题的代码如下:
class SSLAdapter(HTTPAdapter):
def __init__(self, ssl_version=None, **kwargs):
self.ssl_version = ssl_version
self.poolmanager = PoolManager()
super().__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=self.ssl_version)
然后,在创建 RoboBrowser 实例时:
s = Session()
s.mount('https://', SSLAdapter(_ssl.PROTOCOL_TLSv1))
self.browser = RoboBrowser(parser="lxml", session=s, user_agent=user_agent)