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())
Beispiel #2
0
    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, ))
Beispiel #3
0
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)