Python对本地地址的请求会抛出SSLError

时间:2016-12-16 13:12:10

标签: python ssl ssl-certificate python-requests

我有一个带有letsencrypt证书的python3 django网站

一切都很好,除了使用python请求对本地地址的请求:

response = requests.post('http://127.0.0.1:8100', data=data)

它有非常奇怪的行为:

有时我会得到200,但在supervisorctl restart mywebsite之后它会抛出 SSLError

然后我做了:

response = requests.post('http://127.0.0.1:8100', data=data, verify=True)

一切都很好,直到我再次supervisorctl restart mywebsite,它会抛出 SSLError O_o,现在只能用

response = requests.post('http://127.0.0.1:8100', data=data)

所以最终的工作代码是:

try:
    response = requests.post('http://127.0.0.1:8100', data=data, verify=True)
except:
    try:
        response = requests.post('http://127.0.0.1:8100', data=data)
    except:
        response = requests.post('http://127.0.0.1:8100', data=data, verify=False)

显然这不是最好的计划)

建议的大问题

1 个答案:

答案 0 :(得分:0)

您的网络应用最有可能发布从http://https://的重定向。您可以通过查看带有curl -v的响应标头来验证这一点。重定向后,由于使用localhost而不是域名,您可能会收到SSL错误:

  

您无法获得localhost的证书;证书颁发机构只能为公开可见的全局唯一域名颁发证书。 localhost不计算,并且不允许证书颁发机构为其颁发证书。 - https://community.letsencrypt.org/t/can-i-test-lets-encrypt-client-on-localhost/15627

编辑:

尝试使用https://verify=False网址上执行初始请求。