healthgraphic api ssl证书验证失败

时间:2017-07-18 19:27:09

标签: python ssl-certificate python-requests anaconda urllib

当我尝试使用Linux Ubuntu 14.04 Python 3.5.2 :: Anaconda custom(64位)上的最新Anaconda安装访问healthgraphic API时,我总是收到以下错误

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify
failed (_ssl.c:645)>

我不是程序员。我的背景=医学博士/想要使用Python来探索这个健康图表api,以帮助患者自助,但尽管花了几个小时拖网,我仍然坚持这第一步。所以,在绝望中我会向support@healthgraphic.com&amp; support寻求帮助。 stackexchange

import urllib
import json
from urllib.request import urlopen

datalink = 'https://api.healthgraphic.com/v1/symptoms/cough'

headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'token': '7ho6immu3cw04sc4w8448c4okwgckkg'
}

try:
    url = datalink
    req = urllib.request.Request(url, headers = headers)
    resp = urllib.request.urlopen(req)
    respData = resp.read()

    saveFile = open('withHeaders.txt','w')
    saveFile.write(str(respData))
    saveFile.close()
except Exception as e:
    print(str(e))

验证ssl证书存在问题,我无法解决(见下文)&amp;如果你不介意的话,我希望你帮我解决一下......

设置验证=假不起作用&amp;是不安全的

安装/重新安装certifi不起作用

更新请求无效

export REQUESTS_CA_BUNDLE = / etc / ssl / certs / ca-certificates.crt不起作用

conda config --set ssl_verify /etc/ssl/certs/ca-certificates.crt不起作用

这有帮助吗?

[1] % python -c "import requests; print(requests.certs.where())"
/home/*******/anaconda3/lib/python3.5/site-packages/certifi/cacert.pem

如果您能提供帮助,我将非常感激。根据之前发布问题的经验,我想提前道歉,因为引起了不适。

RGDS,

帕特里克

1 个答案:

答案 0 :(得分:0)

Healthgraphic重新配置了他们的服务器&amp;还指出我试图在示例中使用Get Symptoms方法,但只有Get Condition Symptoms可用于免费帐户:https://developer.healthgraphic.com/doc/reference/#condsx。那真是个难题!

无论如何,我可以连接urllib2,urllib或urllib3&amp;请求 - 我更喜欢后者。这段代码有用......

import urllib3
import json
import requests
from requests.auth import HTTPBasicAuth
http = urllib3.PoolManager(
datalink = 'https://api.healthgraphic.com/v1/conditions/acute_sinusitis/symptoms?page=1&per_page=10'
    )

headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'token': 'xxxx_your_token_here_xxxxxxxxxxxxxxxxxx'
}

try:
    url = datalink
    r = requests.get(datalink, headers=headers)
    print(r.json())

except Exception as e:
    print(str(e))