【问题标题】:Python requests.get() raises SSL error accessing web APIPython requests.get() 引发访问 Web API 的 SSL 错误
【发布时间】:2017-06-07 21:29:23
【问题描述】:

我正在尝试访问https://www.ncdc.noaa.gov/cdo-we/api/v2/。这需要在请求here 时立即收到一个令牌。那么:

import requests


def get_noaa_data(url, data_type, header):

    r = requests.get(url, data_type, headers=header)
    print(r)


if __name__ == '__main__':

    token = 'longalphabetictoken'
    creds = dict(token=token)
    dtype = 'dataset'
    url = 'https://www.ncdc.noaa.gov/cdo-web/api/v2/'

    get_noaa_data(url, dtype, creds)

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)

我知道我可以设置verify=False,但我确实想验证。我还希望能够分发此代码,因此我不想通过修改我的 cacert.pem 来解决问题。我也尝试过将certifi 导入到脚本中。如果人们下载我的包,是否有一种与操作系统无关的方式来验证 NOAA 站点的 SSL 证书?

在我看来,如果没有verify=False,就会有一种安全的方式来访问像这样的流行 API。这是我组织的机器的问题吗?

ssl.get_default_verify_paths() = DefaultVerifyPaths(cafile='/data01/anaconda2/envs/imagenv/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/data01/anaconda2/envs/imagenv/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/data01/anaconda2/envs/imagenv/ssl/certs')

仅供参考:亚马逊、谷歌等 https 网站运行良好。

【问题讨论】:

    标签: python rest python-requests certifi


    【解决方案1】:

    您需要确保您组织的 SSL 证书由证书颁发机构 (CA) 签署,否则 ssl 连接将无法正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 2015-03-24
      • 1970-01-01
      • 2016-04-08
      • 2021-05-08
      • 2017-12-26
      • 2017-10-30
      • 2016-11-12
      相关资源
      最近更新 更多