Mas*_*ran 61 python ssl ssl-certificate sni python-requests
我正在使用请求与django应用程序通信但是
当我尝试
requests.get('https://mysite.com', verify=True)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
主机名'mysite.com'与'*.myhost.com','myhost.com'不匹配
但是,当我查看浏览器或http://www.digicert.com/help/时,证书看起来很精致和花花公子.
我的主持人建议缺少SNI支持请求(Github似乎确认https://github.com/kennethreitz/requests/issues/749).有没有人找到使用请求的解决方法?
Luk*_*asa 125
SNI的当前版本的请求应该没问题.在GitHub问题的下面,您可以看到要求:
尝试安装这些包,然后再给它一个镜头.
编辑:自请求v2.12.1起,不再需要ndg-httpsclient和pyasn1.现在所需包的完整列表:
Sha*_*e N 22
为了让我得到公认的工作答案,我必须按以下顺序安装一堆其他软件包:
或者您可以使用Python 2.7.9及更高版本:
"整个Python 3.4的ssl模块已经被反向移植到Python 2.7.9.请参阅PEP 466以获得理由."
https://www.python.org/downloads/release/python-279/
@Lukasa 的答案对于当前(来自 github)的请求是正确的。除了他提到的 pip 依赖项之外,请记住在您的系统中添加 OpenSSL。
如果出于部署原因,您更喜欢 pip 中的 1.2.3 等稳定的请求版本,您可以对该版本进行猴子修补以与 SNI 一起使用,如下所示:
import requests
def fileno(self):
return self.socket.fileno()
def close(self):
return self.connection.shutdown()
requests.pyopenssl.WrappedSocket.close = close
requests.pyopenssl.WrappedSocket.fileno = fileno
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65961 次 |
最近记录: |