当前位置: 代码迷 >> python >> 无法连接到python中的特定URL
  详细解决方案

无法连接到python中的特定URL

热度:62   发布时间:2023-06-13 15:28:49.0

我正在尝试使用Python连接到网站。 我正在尝试使用RoboBrowser库从页面中抓取数据,但是我的连接尝试引发了ReadTimeout错误。 我使用过的所有其他URL(例如Waterstones,Maximiles)都运行良好。

我尝试连接requestsurllib库,并且两者都得到了相同的结果。

我认为问题与SSL验证有关,因此我将其关闭,但它没有任何改变。

通过连接到我提到的其中一个库中的上述URL,您应该能够自己复制问题。

from robobrowser import RoboBrowser
browser = RoboBrowser()
browser.open('https://rewards.heathrow.com')

正如对该问题的评论所暗示的,这是一个SSL版本问题。 解决方案是创建一个适配器类,如下所示: 。

我用来解决此问题的代码如下:

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)