Windows環境中Python SSL異常:Can't connect to HTTPS URL because the SSL module is not available

Python 調用request模塊訪問https網站報錯: Can't connect to HTTPS URL because the SSL module is not available。

環境:Anaconda3.

安裝Anaconda3,開發環境使用Anaconda3 自帶的Jupyter Notebook。 相關函數代碼示例如下:

 


import request

import base64

def GetJiraTickets():
    jiraticketshtml='''<font color="blue",size="3">'''
    url="https://www.baidu.com.cn"
    auth=base64.b64encode(b'username:password')
    auth=auth.decode('utf8')
    header = {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": 'Basic {}'.format(auth),
        "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
    }

    response = requests.request("POST",url,data=None,headers=header)

    #print(response.status_code)

    return response.text.

這個函數在Anaconda的Jupyter Notebook中運行正常,爲了方便調用,創建bat腳本,添加下面一行命令來執行該python 腳本:

C:\Anaconda3\python.exe C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py 

但雙擊運行該bat腳本時報告如下錯誤:


Microsoft Windows [Version 10.0.16299.1268]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\scnzqz>C:\Anaconda3\python.exe C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py
Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 588, in urlopen
    conn = self._get_conn(timeout=pool_timeout)
  File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 248, in _get_conn
    return conn or self._new_conn()
  File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 816, in _new_conn
    raise SSLError("Can't connect to HTTPS URL because the SSL "
urllib3.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\requests\adapters.py", line 449, in send
    timeout=timeout
  File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "C:\Anaconda3\lib\site-packages\urllib3\util\retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.ondemand.sas.com', port=443): Max retries exceeded with url: /jira/issues/?filter=22079 (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py", line 274, in <module>
    sendmail()
  File "C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py", line 268, in sendmail
    mail.HTMLBody  = CreateBodyHtml()
  File "C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py", line 248, in CreateBodyHtml
    statushtml=CreateStatusHtml()
  File "C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py", line 105, in CreateStatusHtml
    ssostatus['Tickets']=ssostatus['Tickets']+GetJiraTickets()
  File "C:\WorkSpace\PythonProgram\Deployment\CreateComplianceReport2.0.py", line 45, in GetJiraTickets
    response = requests.request("POST",url,data=None,headers=header)
  File "C:\Anaconda3\lib\site-packages\requests\api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Anaconda3\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Anaconda3\lib\site-packages\requests\sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "C:\Anaconda3\lib\site-packages\requests\adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.ondemand.sas.com', port=443): Max retries exceeded with url: /jira/issues/?filter=22079 (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))

 


網上搜索大部分是Linux環境相關,有兩篇帖子提到是Anaconda自帶的SSL版本和系統的SSL版本不匹配導致的。很可能是系統自帶的SSL版本低。下載安裝最新版本的OpenSSL後問題解決。bat 腳本執行正常。

參考文章:

https://blog.csdn.net/zcyzhangzhou/article/details/86572845

https://blog.csdn.net/qq_36823518/article/details/88406237

https://blog.csdn.net/u011426236/article/details/88864469

https://blog.csdn.net/marueibo/article/details/86678936

https://slproweb.com/products/Win32OpenSSL.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章