1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import httplib
18 import socket
19 import ssl as sslmodule
20
22 "This class allows communication via SSL."
23
25 "Connect to a host on a given (SSL) port."
26
27 sock = socket.create_connection((self.host, self.port), self.timeout)
28 self.sock = sslmodule.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=sslmodule.PROTOCOL_SSLv3)
29
30 https_v23_connects = set()
31 https_v3_connects = set()
32
39
40 if ssl:
41 if (host, port) in https_v3_connects:
42 try:
43 return trySSL(HTTPSConnection_SSLv3)
44 except:
45 https_v3_connects.remove((host, port))
46 elif (host, port) in https_v23_connects:
47 try:
48 return trySSL(httplib.HTTPSConnection)
49 except:
50 https_v23_connects.remove((host, port))
51
52 try:
53 https_v3_connects.add((host, port))
54 return trySSL(HTTPSConnection_SSLv3)
55 except:
56 https_v3_connects.remove((host, port))
57
58 try:
59 https_v23_connects.add((host, port))
60 return trySSL(httplib.HTTPSConnection)
61 except:
62 https_v23_connects.remove((host, port))
63
64 raise RuntimeError("Cannot connect via with SSLv23 or SSLv3")
65 else:
66 connect = httplib.HTTPConnection(host, port)
67 connect.connect()
68 return connect
69