【问题标题】:Python requests to local address throws SSLError对本地地址的 Python 请求引发 SSLError
【发布时间】:2016-12-16 13:12:10
【问题描述】:

我有一个带有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)

显然这不是最好的计划)

非常感谢您的建议

【问题讨论】:

  • 请在下面查看我的回答,如果有帮助,请点赞或标记为已接受。谢谢

标签: python ssl ssl-certificate python-requests


【解决方案1】:

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

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

编辑:

尝试使用verify=Falsehttps:// URL 执行初始请求。

【讨论】:

  • 嗨,抱歉回复晚了,我尝试了 https insted http: response = requests.post('127.0.0.1:8100', data=data, verify=True) 它不起作用,很长的请求超时
  • 您尝试了我的最后一个编辑建议吗? > 尝试使用 verify=False 对 https:// URL 执行初始请求。
猜你喜欢
  • 2014-08-24
  • 2014-04-20
  • 2018-07-04
  • 1970-01-01
  • 2015-04-24
  • 2016-02-05
相关资源
最近更新 更多