【发布时间】:2019-03-23 01:44:22
【问题描述】:
我安装了 Anaconda,但在尝试通过 Jupyter Notebooks 进行 API 调用时遇到了 SSL 问题:
import requests
import certifi
r = requests.get('https://github.com/')
print(r)
这首先产生了 SSL 连接错误。经过广泛的搜索和我们 IT 部门的帮助,我可以解决这个问题。这里的解决方案是将公司根证书添加到证书存储中。
不幸的是,现在对于其他请求,我仍然遇到同样的问题。使用 google2pandas 包调用 Google Analytics API 的示例代码:
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 在 _create(cls, sock, server_side, do_handshake_on_connect、suppress_ragged_eofs、server_hostname、 上下文,会话) 第848章 第849章 非阻塞套接字") --> 850 self.do_handshake() 851 除了(OSError,ValueError): 第852章
C:\ProgramData\Anaconda3\lib\ssl.py in do_handshake(self, block)
1106 如果超时 == 0.0 并且阻塞:1107
self.settimeout(无) -> 1108 self._sslobj.do_handshake() 1109 最后:1110 self.settimeout(timeout)SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书 验证失败:无法获取本地颁发者证书 (_ssl.c:1045)
我相信还有另一个库正在使用,它不依赖于证书?但是我不知道在哪里以及如何添加我的根证书,所以所有 iPython 请求都可以工作。
感谢任何想法。
【问题讨论】:
-
当您调用 GoogleAnalytics API 时,作为 SSL 握手的一部分,它会出示它的证书。您需要出示证书的颁发者证书才能通过握手。因此,您需要获取它并将其添加到您的商店中。
-
嗨@Jay,感谢您的回复。不幸的是,我不完全理解答案。我确实将公司根证书添加到证书中。我是否需要将其添加到第二家商店以进行握手验证?一般来说,我对 SSL 知之甚少。在我们公司网络之外,来自 Python 库的相同请求可以正常工作。