def run(session, request): # Create connection connect = SmartHTTPConnection(session.server, session.port, session.ssl, session.afunix) connect.set_debuglevel(1) # Do headers connect.putrequest(request.method, request.url, skip_host=True, skip_accept_encoding=True) hdrs = request.getRequestHeaders() for header, value in hdrs.iteritems(): connect.putheader(header, value) connect.endheaders() # Do request body stream = request.getRequestDataStream() if stream: stream.start() more = True while more: data, more = stream.read() if data: connect.send(data) stream.stop() # Get response response = connect.getresponse() # Get response headers request.setResponseStatus(response.version, response.status, response.reason) request.setResponseHeaders(response.getheaders())
def openSession(self): # Create connection self.connect = SmartHTTPConnection(self.server, self.port, self.ssl, self.afunix) # Write to log file if self.loghttp and self.log: self.log.write( "\n <-------- BEGIN HTTP CONNECTION -------->\n") self.log.write("Server: %s\n" % (self.server, ))
def httploop(ctr, config, complete): # Random time delay time.sleep(random.randint(0, config["interval"]) / 1000.0) ServerDetail = collections.namedtuple("ServerDetails", ( "host", "port", "use_ssl", "headers", )) server_details = [] for server in config["server"].split(","): url = urlparse(server) use_ssl = url[0] == "https" if "@" in url[1]: auth, net_loc = url[1].split("@") else: auth = "admin:admin" net_loc = url[1] host, port = net_loc.split(":") port = int(port) user, pswd = auth.split(":") headers = {} headers["User-Agent"] = "httploop/1" headers["Depth"] = "1" headers["Authorization"] = "Basic " + "{}:{}".format( user, pswd).encode("base64")[:-1] headers["Content-Type"] = "application/json" server_details.append(ServerDetail(host, port, use_ssl, headers)) random.shuffle(server_details) interval = config["interval"] / 1000.0 total = config["limit"] / config["numProcesses"] count = 0 jstr = json.dumps({ "action": "testwork", "when": config["when"], "delay": config["delay"], "jobs": config["jobs"], "priority": PRIORITY[config["priority"]], "weight": config["weight"], }) base_time = time.time() iter = itertools.cycle(server_details) while not complete.value: server = iter.next() count += 1 http = SmartHTTPConnection(server.host, server.port, server.use_ssl, False) try: server.headers["User-Agent"] = "httploop-{}/{}".format( ctr, count, ) http.request("POST", "/control", jstr, server.headers) response = http.getresponse() response.read() except Exception as e: print("Count: {}".format(count, )) print(repr(e)) raise finally: http.close() if total != 0 and count >= total: break base_time += interval sleep_time = base_time - time.time() if sleep_time < 0: print("Interval less than zero: process #{}".format(ctr)) base_time = time.time() else: time.sleep(sleep_time)