通过python获取服务器证书时添加超时

通过python获取服务器证书时添加超时,python,ssl,ssl-certificate,Python,Ssl,Ssl Certificate,我正在尝试获取服务器证书列表,并使用python标准SSL库来实现这一点。我就是这样做的: import ssl from socket import * urls = [i.strip().lower() for i in open("urls.txt")] for urls in url: try: print ssl.get_server_certificate((url, 443)) except error: print "No con

我正在尝试获取服务器证书列表,并使用python标准SSL库来实现这一点。我就是这样做的:

import ssl
from socket import *

urls = [i.strip().lower() for i in open("urls.txt")]
for urls in url:
    try:
        print ssl.get_server_certificate((url, 443))
    except error:
        print "No connection"
但是,对于某些URL,存在连接问题,连接只是超时。但是,它会在超时之前等待默认的ssl超时值(相当长)。如何在ssl.get_server_证书方法中指定超时?我以前为套接字指定过超时,但我不知道如何使用此方法从以下方面执行此操作:

所以应该简单到:

import ssl
from socket import *

settimeout(10)

urls = [i.strip().lower() for i in open("urls.txt")]
for urls in url:
    try:
        print ssl.get_server_certificate((url, 443))
    except (error, timeout) as err:
        print "No connection: {0}".format(err)

出现以下错误:AttributeError:“module”对象没有属性“settimeout”。我在文档中看到这是在python 2.7.9中引入的,我的版本是2.7.3。这可能是问题所在吗?请不要使用ssl.settimeout而是尝试使用套接字超时,将该行替换为
settimeout(10)
(应已从套接字导入)。NameError:未定义名称“settimeout”是我获得的错误..但是..setdefaulttimeout(3)方法有效..无论如何,感谢您为我指出了正确的方向..没有ssl需要setdefaulttimeout(3)。setdefaulttimeout(3)然而,ssl模块仍然有1%的时间挂起在connect\u ssl\u wrap\u socket\u impl->ssl.py init self.dohandshake()self.\u sslobj.dohandshake().python 2.7.18中。使用python 2.7.12的不同机器无法做到这一点,见图。setdefaulttimeout似乎对我有效,编辑了答案
import ssl
from socket import *

settimeout(10)

urls = [i.strip().lower() for i in open("urls.txt")]
for urls in url:
    try:
        print ssl.get_server_certificate((url, 443))
    except (error, timeout) as err:
        print "No connection: {0}".format(err)