Python requests.get()提出了访问Web API的SSL错误



我正在尝试访问AT https://www.ncdc.noaa.gov/cdo-we/api/v2/。这需要一个令牌一个人在此处要求后立即接收。然后:

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证书的OS-AGNOTIC方法,如果人们下载我的包裹?

在我看来,如果没有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网站,例如Amazon,Google等,工作正常。

您需要确保您的组织的SSL证书由认证机构(CA(签署,否则SSL连接将无法使用。

最新更新