1
2
3
4
5
6 import socket
7 import sys
8
9
10 CHUNK_SIZE = 16 * 1024
11 MAX_BODY = 1024 * 112
12 DNS_TIMEOUT = 60
13
14 _allowed_ssl_args = ('keyfile', 'certfile', 'server_side',
15 'cert_reqs', 'ssl_version', 'ca_certs',
16 'do_handshake_on_connect', 'suppress_ragged_eofs')
17
19 for arg in ssl_args:
20 if arg not in _allowed_ssl_args:
21 raise TypeError('connect() got an unexpected keyword argument %r' % arg)
22
24 if not skt or not hasattr(skt, "close"): return
25 try:
26 skt.close()
27 except socket.error:
28 pass
29
31 chunk = "".join(("%X\r\n" % len(data), data, "\r\n"))
32 sock.sendall(chunk)
33
34 -def send(sock, data, chunked=False):
38
40 timeout = sock.gettimeout()
41 if timeout != 0.0:
42 try:
43 sock.setblocking(0)
44 return send(sock, data, chunked)
45 finally:
46 sock.setblocking(1)
47 else:
48 return send(sock, data, chunked)
49
51 for line in list(lines):
52 send(sock, line, chunked)
53
55 if hasattr(data, 'seek'):
56 data.seek(0)
57
58 while True:
59 binarydata = data.read(CHUNK_SIZE)
60 if binarydata == '': break
61 send(sock, binarydata, chunked)
62
63
64 if 'java' in sys.platform:
65 from javax.net.ssl import TrustManager, X509TrustManager
66 from jarray import array
67 from javax.net.ssl import SSLContext
69 '''Define a custom TrustManager which will blindly accept all certificates'''
70
73
76
79
80
81 trust_managers = array([TrustAllX509TrustManager()], TrustManager)
82 TRUST_ALL_CONTEXT = SSLContext.getInstance("SSL")
83 TRUST_ALL_CONTEXT.init(None, trust_managers, None)
84
85
86 DEFAULT_CONTEXT = SSLContext.getDefault()
87
89 '''Decorator function that will make it so the context of the decorated method
90 will run with our TrustManager that accepts all certificates'''
91 def wrapped(*args, **kwargs):
92
93 if 'java' in sys.platform:
94 from javax.net.ssl import SSLContext
95 SSLContext.setDefault(TRUST_ALL_CONTEXT)
96 try:
97 res = f(*args, **kwargs)
98 return res
99 finally:
100 SSLContext.setDefault(DEFAULT_CONTEXT)
101 else:
102 return f(*args, **kwargs)
103 return wrapped
104