通过python

时间:2017-10-13 10:23:33

标签: python ssl certificate

Iam尝试对HTTPS网址进行API调用:

response = requests.request("GET", url, headers=headers, params=None, verify=True)

和Iam面临以下错误。当我通过cUrl或Postman调用API时,它工作正常......

  

回溯(最近一次调用最后一次):文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第601行,在urlopen中           chunked = chunked)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第346行,在_make_request中           self._validate_conn(conn)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第850行,在_validate_conn中           conn.connect()文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connection.py",   第326行,在连接中           ssl_context = context)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ util \ ssl_.py",   第329行,在ssl_wrap_socket中           return context.wrap_socket(sock,server_hostname = server_hostname)文件   " C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\ urllib3 \的contrib \ pyopenssl.py&#34 ;,   第448行,在wrap_socket中           提升ssl.SSLError('坏握手:%r'%e)ssl.SSLError :("坏握手:错误([(' SSL例程',   ' tls_process_server_certificate','证书验证失败')],)",)

在处理上述异常期间,发生了另一个异常:

  

Traceback(最近一次调用最后一次):文件   " C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\请求\ adapters.py&#34 ;,   第440行,发送           timeout = timeout文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第639行,在urlopen           _stacktrace = sys.exc_info()[2])文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ util \ retry.py&#34 ;,   第388行,增量           引发MaxRetryError(_pool,url,error或ResponseError(cause))urllib3.exceptions.MaxRetryError:   HTTPSConnectionPool(host =' freshdesk.freshsales.io',port = 443):Max   使用url超出重试次数:   /api/sales_accounts/1000080286/conversations.json?include=email_conversation_recipients,all,targetable,phone_numbe,phone_calle,note,user   (由SSLError引起(SSLError("坏握手:错误([(' SSL例程',   ' tls_process_server_certificate','证书验证   失败&#39)],)",),))

我尝试指定 verify = False 。但仍有错误

  

C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\ urllib3 \ connectionpool.py:858:   InsecureRequestWarning:正在进行未验证的HTTPS请求。添加   强烈建议进行证书验证。看到:   https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings   InsecureRequestWarning)Traceback(最近一次调用最后一次):文件   " C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\ urllib3 \的contrib \ pyopenssl.py&#34 ;,   第441行,在wrap_socket中           cnx.do_handshake()文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ OpenSSL \ SSL.py",   第1716行,在do_handshake中           self._raise_ssl_error(self._ssl,result)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ OpenSSL \ SSL.py",   第1456行,在_raise_ssl_error中           _raise_current_error()文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ OpenSSL_util.py",   第54行,在exception_from_error_queue中           提出exception_type(错误)OpenSSL.SSL.Error:[(' SSL例程',' tls_process_server_certificate','证书验证   失败&#39)]

在处理上述异常期间,发生了另一个异常:

  

Traceback(最近一次调用最后一次):文件   " C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\ urllib3 \ connectionpool.py&#34 ;,   第601行,在urlopen中           chunked = chunked)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第346行,在_make_request中           self._validate_conn(conn)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connectionpool.py",   第850行,在_validate_conn中           conn.connect()文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ connection.py",   第326行,在连接中           ssl_context = context)文件" C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ urllib3 \ util \ ssl_.py",   第329行,在ssl_wrap_socket中           return context.wrap_socket(sock,server_hostname = server_hostname)文件   " C:\用户\用户\应用程序数据\本地\程序\的Python \ Python35-32 \ lib中\站点包\ urllib3 \的contrib \ pyopenssl.py&#34 ;,   第448行,在wrap_socket中           提升ssl.SSLError('坏握手:%r'%e)ssl.SSLError :("坏握手:错误([(' SSL例程',   ' tls_process_server_certificate','证书验证失败')],)",)

关于如何规避此错误的任何想法?我在这里浏览了各种问题,但无法找到解决方案。 URL管理员还确认服务器证书是有效的,所以我觉得这肯定会对某些冲突的软件包安装做些什么。

这是我的pip冻结包裹清单:

C:\Users\user\python>pip freeze
asn1crypto==0.23.0
attrs==16.3.0
Automat==0.5.0
beautifulsoup4==4.5.3
bleach==1.5.0
bs4==0.0.1
certifi==2017.7.27.1
cffi==1.11.2
chardet==3.0.4
chargebee==2.1.8
colorama==0.3.7
constantly==15.1.0
cryptography==2.1.1
cssselect==1.0.1
decorator==4.0.11
entrypoints==0.2.2
html5lib==0.9999999
idna==2.6
incremental==16.10.1
ipykernel==4.5.2
ipython==5.3.0
ipython-genutils==0.1.0
ipywidgets==5.2.2
Jinja2==2.9.5
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.0.0
jupyter-console==5.1.0
jupyter-core==4.3.0
lxml==3.7.3
MarkupSafe==0.23
mistune==0.7.3
nbconvert==5.1.1
nbformat==4.3.0
notebook==4.4.1
numpy==1.12.0
pandas==0.19.2
pandocfilters==1.4.1
parsel==1.1.0
pickleshare==0.7.4
prompt-toolkit==1.0.13
pyasn1==0.2.3
pyasn1-modules==0.0.8
pycparser==2.18
PyDispatcher==2.0.5
Pygments==2.2.0
PyJWT==1.5.0
pyOpenSSL==17.3.0
PySocks==1.6.7
python-dateutil==2.6.0
pytz==2016.10
pyzmq==16.0.2
qtconsole==4.2.1
queuelib==1.4.2
requests==2.18.4
selenium==3.0.2
service-identity==16.0.0
simplegeneric==0.8.1
six==1.11.0
testpath==0.3
tornado==4.4.2
traitlets==4.3.2
twilio==6.0.0
urllib3==1.22
w3lib==1.17.0
wcwidth==0.1.7
widgetsnbextension==1.2.6
win-unicode-console==0.5
zope.interface==4.3.3

1 个答案:

答案 0 :(得分:2)

最后发现这是一个网络问题。与我公司的IT团队一起解决这个问题,他们通过做一些IP白名单解决了这个问题。