def repeat(req_id): sqlite_con = saver.get_connection() cursor = sqlite_con.cursor() _, host, port, request, is_https = saver.get_request(cursor, req_id) sqlite_con.close() # Connecting to server sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) if is_https: context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) sock = context.wrap_socket(sock, server_hostname=host) sock.send(request) # Getting response parser = HttpParser() resp = b'' while True: data = sock.recv(buffer_size) if not data: break received = len(data) _ = parser.execute(data, received) if parser.is_partial_body(): resp += parser.recv_body() if parser.is_message_complete(): break headers = parser.get_headers() # Decode answer if headers['CONTENT-ENCODING'] == 'gzip': resp = gzip.decompress(resp) resp = str(resp, 'utf-8') else: try: resp = resp.decode('utf-8') except UnicodeDecodeError: print('Body wasn\'t decoded') print("{} HTTP/{}.{}".format(parser.get_status_code(), *parser.get_version())) for header in headers: print('{}: {}'.format(header, headers.get(header))) print() print(resp) print()