我试图从使用HttpBasicAuth的网站下载文件。在Ubuntu机器上一切正常,但是当我尝试在Windows机器上运行脚本时却没有。我在使用请求从该网站下载文件时遇到问题。以下是与我的问题相关的代码:
适用于Ubuntu的初始代码:
url = 'https://abc.example.com'
s = requests.Session()
s.verify = False
s.auth = (creds['user'], creds['passwd'])
filename = "somefile.txt"
download_url = url + "/" + filename
resp = s.get(download_url) # fails on this line when run in Windows
我做了verify=False
因为我没有SSL3_GET_SERVER_CERTIFICATE:certificate verify failed.
。我不完全理解这意味着什么,我会很感激解释。根据我的理解,请求无法验证服务器的证书。同样,我的浏览器似乎也无法识别证书,如下所示。
无论如何,所以我在Windows上运行了几乎相同的python版本(2.7.x)的脚本,我得到了这个:
我进行了快速搜索并找到了一些修正here并找到了github issue here。我按照第一个修复程序将代码更改为:
url = 'https://abc.example.com'
s = requests.Session()
s.verify = False
s.auth = (creds['user'], creds['passwd'])
s.mount('https://', MyAdapter())
# .. omitted code similar to the one above ..
resp = s.get(download_url)
我添加了答案中指定的类
class MyAdapter(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1)
它仍然显示相同的错误。
从github问题来看,他们正在检查OpenSSL版本,所以我检查了Windows机器,如果我没记错,它是1.0.2a
。我检查了初始版本工作的Ubuntu机器,它是1.0.1f
。
编辑:
Ubuntu中的Python版本:2.7.6(在这里工作)
Windows中的Python版本:2.7.10(此处不起作用)