https(ssl)连接之python实现
2016-09-05 10:20
225 查看
出自:http://www.cnblogs.com/jcli/archive/2013/03/13/2956909.html
今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。
原因是以下一段代码引起的:
本来这段代码很简单的,就是请求一个https的连接,可是报以下错误:
第一反应是https证书问题产生的,如是以'python ssl' 为关键字google后,看到大家都在用'requests'这个python组件做http请求客户端,就像java里面的httpclient组件一样,如果安装完request包后,改成如下代码:
还是报以下错误:
可以看出来,用requests和urllib2报的错误信息是一样,可见它们都是基于相同的底层api操作的,比如基于TLS的socket连接。到这里的时候我怀疑这个问题不是python代码写的有问题,可能是操作系统级别的设置错了。如下直接在shell客户端运行如下测试脚本:
果然报如下错误:
到这里我怀疑是openssl安装有问题,更新到最新版本后还是一样,然后在浏览器里访问是可以的,所以应该不是openssl有问题。继续google.......,就发现有人也遇到过这种问题,说是连接SSL服务器时SSL的版本不对,如是用如下代码测试不同的SSL版本,看是不是这个问题:
分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。说明这个https连接所在的服务器是基于SSLV3版本的。找到的问题,就很容易知道怎么改写python代码了。
urllib2实现:
可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。
参考文章:http://bugs.python.org/issue11220
https://github.com/kennethreitz/requests/issues/606
https(ssl)连接之python实现
今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。原因是以下一段代码引起的:
参考文章:http://bugs.python.org/issue11220
https://github.com/kennethreitz/requests/issues/606
原创文章,转载请注明出处,谢谢
相关文章推荐
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- AFNetworking 2.0 实现自签名SSL的HTTPS网络连接
- windows下apache配置SSL以实现http转换为https
- [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- [转载]在tomcat中实现https安全连接的方法
- tomcat中实现https安全连接的方法
- 简单实现Tomcat使用SSL的连接。
- java应用 tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 利用struts2-ssl-plugin实现https安全链接
- Python实现绑定端口等待连接
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- 调用Https WebService发布后使用时报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系”证书验证失败的解决过程(3)
- IIS 6.0下安装SSL数字证书实现https访问
- 在tomcat中实现https安全连接的方法
- Apache+mod_ssl实现https服务的主要配置