Source code for top.web.random_requests

"""Generate random HTTP requests to localhost.

To have some traffic on our web-top screen.
"""
import datetime
import random
import time
from threading import Thread

import requests

server = "http://localhost:8080"


[docs]def event_generator(): global task_counter min_next_delay = 0.01 max_next_delay = 1 methods = ["GET", "POST", "PUT"] paths = ["/", "/api/register", "/api/login", "/about", "/contact"] countries = ["FI", "US", "T1", "CH", "GI"] next_event = datetime.datetime.utcnow() session = requests.Session() while True: # Sleep until the next event now = datetime.datetime.utcnow() left = (next_event - now).total_seconds() if left > 0: time.sleep(left) method = random.choice(methods) path = random.choice(paths) # Add some GET params params = None if method == "GET": params = {} if random.random() > 0.5: params["next-page"] = "aaa" if random.random() > 0.5: params["previous-page"] = "bbb" # Some requests have geolocation headers = {} if random.random() > 0.05: headers["CF-IPCountry"] = random.choice(countries) url = f"{server}{path}" req = requests.Request( method=method, url=url, params=params, headers=headers, ) req = req.prepare() print("Sending request", req.url) session.send(req) next_event = datetime.datetime.utcnow() + datetime.timedelta( seconds=random.uniform(min_next_delay, max_next_delay))
[docs]def main(): print(f"Generating random HTTP requests to {server}") generator_threads = 5 for i in range(generator_threads): thread = Thread(target=event_generator) thread.start() time.sleep(9999)
if __name__ == "__main__": main()