Advertisement
This is comment for paste
@CipherSerpeant
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import threading
- import requests
- class LoadTester:
- def __init__(self, url, payload):
- self.url = url
- self.payload = payload
- self.request_counter = 0
- self.printed_msgs = []
- self.lock = threading.Lock()
- self.threads = 500 # Default number of threads
- def print_msg(self, msg):
- with self.lock:
- if msg not in self.printed_msgs:
- print(f"\n{msg} after {self.request_counter} requests")
- self.printed_msgs.append(msg)
- def handle_status_codes(self, status_code):
- with self.lock:
- self.request_counter += 1
- print(f"\r{self.request_counter} requests have been sent", end="")
- if status_code == 429:
- self.print_msg("You have been throttled")
- elif status_code == 500:
- self.print_msg("Status code 500 received")
- def send_get(self):
- while True:
- try:
- response = requests.get(self.url)
- self.handle_status_codes(response.status_code)
- except requests.RequestException:
- pass
- def send_post(self):
- while True:
- try:
- response = requests.post(self.url, data=self.payload)
- self.handle_status_codes(response.status_code)
- except requests.RequestException:
- pass
- def start(self):
- threads = []
- for _ in range(self.threads):
- if self.url:
- if self.payload:
- thread = threading.Thread(target=self.send_post)
- else:
- thread = threading.Thread(target=self.send_get)
- threads.append(thread)
- thread.start()
- for thread in threads:
- thread.join() # Note: This will make the main thread wait indefinitely
- if __name__ == "__main__":
- parser = argparse.ArgumentParser()
- parser.add_argument("-g", "--get", help="Specify GET request. Usage: -g '<url>'")
- parser.add_argument("-p", "--post", help="Specify POST request. Usage: -p '<url>'")
- parser.add_argument("-d", "--data", help="Specify data payload for POST request")
- args = parser.parse_args()
- if not args.get and not args.post:
- parser.print_usage()
- elif args.get and args.post:
- print("You must specify either a GET (-g) or POST (-p) request.")
- else:
- url = args.get or args.post
- load_tester = LoadTester(url, args.data)
- load_tester.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement