Python中HTTPS连接
来源:互联网 发布:sift算法的opencv代码 编辑:程序博客网 时间:2024/05/16 12:09
今天写代码时碰到一个问题,花了几个小时的时间google,
首先需要安装openssl,更新到最新版本后,在浏览器里看是否可访问,如果是可以的,所以应该不是openssl有问题。
然后使用 curl尝试访问
curl -v https://ui2web1.apps.uillinois.edu/BANPROD1/bwskfcls.P_GetCrse可以查看ssl版本,如果不能访问,尝试更换ssl版本
1
2
3
4
5
curl -1 https:
//xxx
.com
curl -2 https:
//xxx
.com
curl -3 https:
//xxx
.com
分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。说明这个https连接所在的服务器是基于SSLV3版本的。找到的问题,就很容易知道怎么改写python代码了。
1
2
3
4
5
6
7
8
9
class
MyAdapter(HTTPAdapter):
def
init_poolmanager(
self
, connections, maxsize):
self
.poolmanager
=
PoolManager(num_pools
=
connections,
maxsize
=
maxsize,
ssl_version
=
ssl.PROTOCOL_SSLv3)
s
=
requests.Session()
s.mount(
'https://'
, MyAdapter())
#所有的https连接都用ssl.PROTOCOL_SSLV3去连接
s.get(
'https://xxx.com'
)
urllib2实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# custom HTTPS opener, banner's oracle 10g server supports SSLv3 only
import
httplib, ssl, urllib2, socket
class
HTTPSConnectionV3(httplib.HTTPSConnection):
def
__init__(
self
,
*
args,
*
*
kwargs):
httplib.HTTPSConnection.__init__(
self
,
*
args,
*
*
kwargs)
def
connect(
self
):
sock
=
socket.create_connection((
self
.host,
self
.port),
self
.timeout)
if
self
._tunnel_host:
self
.sock
=
sock
self
._tunnel()
try
:
self
.sock
=
ssl.wrap_socket(sock,
self
.key_file,
self
.cert_file, ssl_version
=
ssl.PROTOCOL_SSLv3)
except
ssl.SSLError, e:
print
(
"Trying SSLv3."
)
self
.sock
=
ssl.wrap_socket(sock,
self
.key_file,
self
.cert_file, ssl_version
=
ssl.PROTOCOL_SSLv23)
class
HTTPSHandlerV3(urllib2.HTTPSHandler):
def
https_open(
self
, req):
return
self
.do_open(HTTPSConnectionV3, req)
# install opener
urllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3()))
if
__name__
=
=
"__main__"
:
r
=
urllib2.urlopen(
"https://ui2web1.apps.uillinois.edu/BANPROD1/bwskfcls.P_GetCrse"
)
print
(r.read())
可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。
参考文章:http://bugs.python.org/issue11220
https://github.com/kennethreitz/requests/issues/606
0 0
- Python中HTTPS连接
- QT中支持https连接
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- https(ssl)连接之python实现
- Tomcat 5.5 中启用 HTTPS 的连接
- tomcat中如何配置https连接
- 在Tomcat中配置https安全连接
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- android中进行https连接的方式
- 在Tomcat中配置Https安全连接
- ionic 检测版本更新,Android版,IOS在浏览器打开下载页面。
- Python日志输出——logging模块
- 一行代码,解决百度云大文件下载限制
- Android基础---->XMl数据的解析
- Mac下解决程序端口占用
- Python中HTTPS连接
- 使用LIFERAY的NOTIFICATIONS PORTLET做通知
- Activity进入与退出的动画
- Android 6.0 指纹识别功能学习(一)----阿冬专栏!!!
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
- ios 公司账号、企业账号、个人账号的区别
- zhoukao
- weka聚类模型的参数解析
- Java 并发编程深入学习(五)——死锁