我已经安装了 Anaconda,但在尝试通过 Jupyter Notebooks 进行 API 调用时遇到了 SSL 问题:
import requests
import certifi
r = requests.get('https://github.com/')
print(r)
这首先产生了 SSL 连接错误。经过广泛的搜索和我们 IT 部门的帮助,我可以解决这个问题。这里的解决方案是将公司根证书添加到 certifi 证书存储中。
现在对于其他请求,不幸的是我仍然遇到同样的问题。使用 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 错误:
_create 中的 C:\ProgramData\Anaconda3\lib\ssl.py(cls, sock, server_side, do_handshake_on_connect、suppress_ragged_eofs、server_hostname、 上下文、会话) 第848章 第849章 非阻塞套接字”) --> 850 self.do_handshake() 第851章 第852章
do_handshake(self, block)中的C:\ProgramData\Anaconda3\lib\ssl.py第1106章 1107 第1107章 self.settimeout(无) -> 1108 self._sslobj.do_handshake() 1109 最后:1110 self.settimeout(timeout)
SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]证书 验证失败:无法获取本地颁发者证书(_ssl.c:1045)我相信还有另一个库正在使用,它不依赖于证书?但我不知道在哪里以及如何添加我的根证书,所以所有 iPython 请求都可以工作。
任何想法都值得赞赏。
import requests as r
print(r.certs.where())
打印python使用的
cacert.pem
的路径,编辑它并将CA证书附加到它的底部。
根据评论已过时:
一种可能的解决方案是指示 Python 使用 Windows 证书存储而不是 certifi 包中的内置存储。您可以通过安装 python-certifi-win32 来做到这一点:
pip install python-certifi-win32
Python 使用与浏览器相同的证书。
__init__
的
ssl.SSLSocket
方法进行猴子修补,以便它始终通过强制 cert_reqs=CERT_NONE
参数来忽略 SSL 证书验证。将其添加到脚本的开头:
import ssl
orig_sslsocket_init = ssl.SSLSocket.__init__
ssl.SSLSocket.__init__ = lambda *args, cert_reqs=ssl.CERT_NONE, **kwargs: orig_sslsocket_init(*args, cert_reqs=ssl.CERT_NONE, **kwargs)
干杯,
安德烈亚斯
verify=False
作为论据
例如
re=requests.get(str(url)+"/"+str(f), headers=headers)
成为
re=requests.get(str(url)+"/"+str(f), headers=headers, verify=False)