mirror of
https://github.com/xcat2/confluent.git
synced 2024-11-23 01:53:28 +00:00
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
#!/usr/bin/python
|
|
try:
|
|
import http.client as client
|
|
except ImportError:
|
|
import httplib as client
|
|
import socket
|
|
import ssl
|
|
import sys
|
|
|
|
class HTTPSClient(client.HTTPConnection, object):
|
|
def __init__(self, port=443):
|
|
self.stdheaders = {}
|
|
info = open('/etc/confluent/confluent.info').read().split('\n')
|
|
host = None
|
|
mgtiface = None
|
|
havedefault = '0'
|
|
for line in info:
|
|
if line.startswith('NODENAME:'):
|
|
node = line.split(' ')[1]
|
|
self.stdheaders['CONFLUENT_NODENAME'] = node
|
|
if line.startswith('MANAGER:') and not host:
|
|
host = line.split(' ')[1]
|
|
if line.startswith('EXTMGRINFO:'):
|
|
extinfo = line.split(' ')[1]
|
|
extinfo = extinfo.split('|')
|
|
if not mgtiface:
|
|
host, mgtiface, havedefault = extinfo[:3]
|
|
if havedefault == '0' and extinfo[2] == '1':
|
|
host, mgtiface, havedefault = extinfo[:3]
|
|
self.stdheaders['CONFLUENT_APIKEY'] = open('/etc/confluent/confluent.apikey').read().strip()
|
|
if mgtiface:
|
|
self.stdheaders['CONFLUENT_MGTIFACE'] = mgtiface
|
|
client.HTTPConnection.__init__(self, host, port)
|
|
self.connect()
|
|
|
|
def set_header(self, key, val):
|
|
self.stdheaders[key] = val
|
|
|
|
def connect(self):
|
|
addrinf = socket.getaddrinfo(self.host, self.port)[0]
|
|
psock = socket.socket(addrinf[0])
|
|
psock.connect(addrinf[4])
|
|
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
|
ctx.load_verify_locations('/etc/confluent/ca.pem')
|
|
host = self.host.split('%', 1)[0]
|
|
if '[' not in host and ':' in host:
|
|
self.stdheaders['Host'] = '[{0}]'.format(host)
|
|
else:
|
|
self.stdheaders['Host'] = '{0}'.format(host)
|
|
ctx.verify_mode = ssl.CERT_REQUIRED
|
|
ctx.check_hostname = True
|
|
self.sock = ctx.wrap_socket(psock, server_hostname=host)
|
|
|
|
def grab_url(self, url, data=None, returnrsp=False):
|
|
if data:
|
|
method = 'POST'
|
|
else:
|
|
method = 'GET'
|
|
self.request(method, url, headers=self.stdheaders)
|
|
rsp = self.getresponse()
|
|
if rsp.status >= 200 and rsp.status < 300:
|
|
if returnrsp:
|
|
return rsp
|
|
else:
|
|
return rsp.read()
|
|
raise Exception(rsp.read())
|
|
|
|
if __name__ == '__main__':
|
|
data = None
|
|
if len(sys.argv) == 4:
|
|
with open(sys.argv[3], 'wb') as outf:
|
|
reader = HTTPSClient().grab_url(sys.argv[1], data, returnrsp=True)
|
|
chunk = reader.read(16384)
|
|
while chunk:
|
|
outf.write(chunk)
|
|
chunk = reader.read(16384)
|
|
sys.exit(0)
|
|
if len(sys.argv) == 3:
|
|
data = open(sys.argv[2]).read()
|
|
print(HTTPSClient().grab_url(sys.argv[1], data).decode())
|