#!/usr/bin/env python3 import argparse, requests from http.server import HTTPServer, BaseHTTPRequestHandler CLIENT_HEADERS = { 'Connection': 'Keep-Alive', 'Content-Type': 'application/octet-stream', } class Handler(BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' def do_POST(self): self.rfile.read(int(self.headers.get('Content-Length'))) self.send_response(200) self.send_header('Connection', 'keep-alive') self.send_header('Content-Type', 'application/octet-stream') self.send_header('Content-Length', '0') self.end_headers() return parser = argparse.ArgumentParser() parser.add_argument('--client', help = 'client mode', action = 'store_true') parser.add_argument('--host', type = str, help = 'remote/listen host', required = True) parser.add_argument('--port', type = int, help = 'remote/listen port', required = True) parser.add_argument('--size', type = int, help = '(client mode) content length') parser.add_argument('--count', type = int, help = '(client mode) number of posts (0 = unlimited)') ns = parser.parse_args() if ns.client and (ns.size is None or ns.count is None): parser.error('--client requires --size and --count') if ns.client: data = bytes(0 for _ in range(1, ns.size)) client = requests.Session() count = 0 while count < ns.count or ns.count == 0: client.post(url = 'http://{}:{}/mqipt'.format(ns.host, ns.port), data = data, headers = CLIENT_HEADERS) count += 1 if count % 100 == 0: print('client: {} posts sent'.format(count)) else: server = HTTPServer((ns.host, ns.port), Handler) server.serve_forever()