#!/usr/bin/env python3 # -*- encoding: utf-8 -*- # vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab import argparse import json import random import requests def gen_params(): CHARS = random.choice(['', 'lowercase', 'uppercase', 'letters']) LENGTH = random.randint(0, 20) NUM = random.randint(0, 5) payload = {} if CHARS: payload['chars'] = CHARS if LENGTH: payload['len'] = LENGTH if NUM: payload['num'] = NUM return payload def main(): parser = argparse.ArgumentParser() parser.add_argument('--execution-id', help='api gateway execution-id') parser.add_argument('--region-name', action='store', default='us-east-1', help='aws region name (default: us-east-1)') parser.add_argument('--auth-token', help='authorization token to access Rest APIs') parser.add_argument('--max-count', default=10, type=int, help='The max number of trials') parser.add_argument('--api-stage', default='prod', help='api stage name: [prod, dev] (default: prod)') parser.add_argument('--dry-run', action='store_true') options = parser.parse_args() EXECUTION_ID = options.execution_id REGION = options.region_name MY_ID_TOKEN = options.auth_token URL = f'https://{EXECUTION_ID}.execute-api.{REGION}.amazonaws.com/{options.api_stage}/random/strings' for _ in range(options.max_count): payload = gen_params() headers = {'Authorization': MY_ID_TOKEN} if MY_ID_TOKEN else {} if options.dry_run: query_strings = '&'.join([f"{k}={v}" for k, v in payload.items()]) auth_header = f'--header "Authorization: {MY_ID_TOKEN}"' if headers else "" print(f"curl -XGET '{URL}?{query_strings}' {auth_header}") continue res = requests.get(URL, params=payload, headers=headers) output = res.json() if res.status_code == 200 else [] print(res.status_code, json.dumps(output), res.url) if __name__ == '__main__': main()