使用python将请求发送到https页面时出现ConnectionError

时间:2018-08-23 20:42:45

标签: python-3.x http https

我正在尝试实现确定页面是否支持tls以及是否需要具有前缀www的程序。因此,我正在测试page1.cz并检查此对象的响应状态:

Session().get('http://page1.cz')
<Response [200]>
Session().get('http://www.page1.cz')
<Response [200]>
Session().get('https://page1.cz')
<Response [200]>
Session().get('https://www.page1.cz')
<Response [200]>

它工作正常,我知道page1.cz使用的是https,并且始终重定向到https://page1.cz。当我尝试page2.cz时,使用前缀https进行测试时收到错误消息。我收到此错误:

Session().get('http://page2.cz')
<Response [200]>
Session().get('http://www.page2.cz')
<Response [200]>
Session().get('https://page2.cz')
ConnectionError: HTTPSConnectionPool(host='page2.cz', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f75e85f03c8>: Failed to establish a new connection: [Errno 111] Connection refused',))
Session().get('https://www.page2.cz')
ConnectionError: HTTPSConnectionPool(host='www.page2.cz', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f75e85f03c8>: Failed to establish a new connection: [Errno 111] Connection refused',))

我知道第二页不支持https,但是为什么会出现该错误?它应该只返回代码4xx还是我错了?我在做什么错,如何检查页面是否支持httphttpswww前缀?

1 个答案:

答案 0 :(得分:1)

错误表明主机拒绝了连接,并引发了错误。

您可以使用try-except块来处理异常。

import requests

try:
    req = requests.get(your_website)
except requests.exceptions.ConnectionError:
    print("Connection refused")

此外,您可以为请求设置超时,例如

req = requests.get(your_website, timeout=1)

例如,考虑以下不支持https的网站http://www.qq.com/

your_websitehttp://www.qq.com/的情况下,您将获得200 OK,而在your_websitehttps://www.qq.com/的情况下,将引发异常。