我已经安装了Anaconda,在尝试通过Jupyter Notebooks进行API调用时遇到了SSL问题:
import requests
import certifi
r = requests.get('https://github.com/')
print(r)
这首先产生了一个SSL连接错误。经过广泛的搜索和我们IT部门的帮助,我可以解决这个问题。这里的解决方案是将公司根证书添加到证书存储中。
现在对于其他请求,不幸的是我仍然有同样的问题。示例代码调用谷歌分析API与google 2 pandas包:
from google2pandas import *
query = {
'reportRequests': [{
'viewId' : 37616054,
'dateRanges': [{
'startDate' : '8daysAgo',
'endDate' : 'today'}],
'dimensions' : [
{'name' : 'ga:date'},
{'name' : 'ga:pagePath'},
{'name' : 'ga:browser'}],
'metrics' : [
{'expression' : 'ga:pageviews'}],
'dimensionFilterClauses' : [{
'operator' : 'AND',
'filters' : [
{'dimensionName' : 'ga:browser',
'operator' : 'REGEXP',
'expressions' : ['Firefox']},
{'dimensionName' : 'ga:pagePath',
'operator' : 'REGEXP',
'expressions' : ['iPhone']}]
}]
}]
}
# Assume we have placed our client_secrets_v4.json file in the current
# working directory.
conn = GoogleAnalyticsQueryV4(secrets='Analytics.json')
df = conn.execute_query(query)
在这里,我仍然得到了我在之前的简单调用中遇到的SSL错误:
C:\ProgramData\Anaconda3\lib\ssl.py in _create(cls,sock,server_side,do_handshake_on_connect,suppress_ragged_eofs,server_hostname,context,session)848 # non-blocking 849 raise ValueError(“do_handshake_on_connect should not be specified for non-blocking sockets”)--〉850self.do_handshake()851 except(OSError,ValueError):852 self.close()
C:\ProgramData\Anaconda3\lib\ssl.py in do_handshake(self,block)
1106,如果超时== 0.0,则阻塞:1107
self.settimeout(None)-〉1108 self._sslobj.do_handshake()1109 finally:1110 self.settimeout(timeout)
SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:无法获取本地颁发者证书(_ssl.c:1045)
我相信有另一个库正在使用,它不依赖于证书,但我不知道在哪里以及如何添加我的根证书,所以所有的iPython请求都可以工作。
任何想法都赞赏。
6条答案
按热度按时间vltsax251#
我花了几天的时间来解决这个问题。最后我在请求库使用的配置文件中添加了我公司的CA证书。您可以通过以下方式检查此文件的路径:
打印python使用的
cacert.pem
的路径,编辑它并将CA证书附加到它的底部。3lxsmp7m2#
一个可能的解决方案是指示Python使用您的Windows证书存储,而不是certifici包中的内置存储。您可以通过安装python-certifici-win32来做到这一点:
然后Python使用与浏览器相同的证书。
jgovgodb3#
由于安全性的原因,上述解决方案并不是很适合。针对此问题的较好解决方案是:
vdgimpew4#
您可以对
ssl.SSLSocket
的__init__
方法进行monkey-patch,通过强制使用cert_reqs=CERT_NONE
参数,使其始终忽略SSL证书验证。在脚本的开头添加以下内容:
vx6bjr1n5#
我已经取得了进展. httplib2是包,导致的问题.它有它自己的cacerts.txt,在那里我添加了根证书以及现在.
干杯
安德烈亚斯
dvtswwa36#
在每一个“请求.某事”上,加上:
作为论据
例如
成为