"Python requests.get() 引发 SSL 错误访问网络 API"

2024-04-20 13:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试访问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网站工作良好。你知道吗


Tags: httpstokenapiurlssldatagetrequests