{"library":"requests-aws-sign","title":"AWS Signature Version 4 Signing for Requests","description":"requests-aws-sign is a Python package that enables AWS Signature Version 4 (SigV4) request signing using the popular `requests` library. It provides the `AWSV4Sign` class which extends `requests.auth.AuthBase` to handle the intricate SigV4 signing process for HTTP requests to AWS services. The current version is 0.1.6, and it appears to be in a maintenance state, with the last release in July 2020.","language":"python","status":"maintenance","last_verified":"Thu May 21","install":{"commands":["pip install requests-aws-sign"],"cli":null},"imports":["from requests_aws_sign import AWSV4Sign"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import requests\nfrom requests_aws_sign import AWSV4Sign\nfrom boto3 import session\nimport os\n\n# NOTE: For a real application, ensure AWS credentials are set via environment\n# variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN)\n# or AWS config files, so boto3 can find them.\n# For this example, we'll try to get them, but you might need to set them.\n\nsession_boto3 = session.Session()\ncredentials = session_boto3.get_credentials() if session_boto3.get_credentials() else None\n\nif not credentials or not credentials.access_key or not credentials.secret_key:\n    print(\"Warning: AWS credentials not found. Using dummy credentials. This request will likely fail.\")\n    print(\"Please configure AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and optionally AWS_SESSION_TOKEN environment variables.\")\n    access_key = os.environ.get('AWS_ACCESS_KEY_ID', 'AKIAIOSFODNN7EXAMPLE')\n    secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY', 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY')\n    session_token = os.environ.get('AWS_SESSION_TOKEN', None)\n    \n    # Mocking a credentials object if boto3 couldn't find them\n    class MockCredentials:\n        def __init__(self, access_key, secret_key, token):\n            self.access_key = access_key\n            self.secret_key = secret_key\n            self.token = token\n    credentials = MockCredentials(access_key, secret_key, session_token)\n\nregion = session_boto3.region_name or 'us-east-1' # Default to us-east-1 if boto3 can't determine\nservice = 'es' # Example service, e.g., 's3', 'execute-api', 'es'\n\n# This URL is an example and likely won't work without a real Elasticsearch domain\n# Replace with a real AWS service endpoint you have access to\nurl = f\"https://{service}-domain-example.{region}.es.amazonaws.com/\"\n\nauth = AWSV4Sign(credentials, region, service)\n\ntry:\n    response = requests.get(url, auth=auth, timeout=5) # Added timeout\n    response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)\n    print(f\"Successfully signed and sent request to {url}\")\n    print(f\"Status Code: {response.status_code}\")\n    # print(response.text) # Uncomment to see response body\nexcept requests.exceptions.RequestException as e:\n    print(f\"Request failed: {e}\")\n    if hasattr(e, 'response') and e.response is not None:\n        print(f\"Response status code: {e.response.status_code}\")\n        print(f\"Response headers: {e.response.headers}\")\n        print(f\"Response body: {e.response.text}\")\n","lang":"python","description":"This quickstart demonstrates how to use `requests-aws-sign` to sign an HTTP GET request to an AWS service (e.g., Elasticsearch Service). It leverages `boto3` to automatically retrieve AWS credentials and region, falling back to dummy credentials if not found. This ensures the necessary `AWSV4Sign` object is correctly initialized before making the signed request. Remember to replace the `url` and `service` with your actual AWS service endpoint and name.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-21","installed_version":"0.1.6","pypi_latest":"0.1.6","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4.2,"avg_import_s":0.84,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.69,"mem_mb":12.4,"disk_size":"53.1M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.83,"mem_mb":12.3,"disk_size":"52.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.5,"import_time_s":0.46,"mem_mb":12.4,"disk_size":"54M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.57,"mem_mb":12.3,"disk_size":"53M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.88,"mem_mb":13.8,"disk_size":"56.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.4,"mem_mb":13.8,"disk_size":"55.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.2,"import_time_s":0.77,"mem_mb":13.8,"disk_size":"57M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.96,"mem_mb":13.8,"disk_size":"56M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":13.6,"disk_size":"47.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.95,"mem_mb":13.5,"disk_size":"47.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.8,"mem_mb":13.6,"disk_size":"48M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.08,"mem_mb":13.5,"disk_size":"48M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.79,"mem_mb":14.8,"disk_size":"47.4M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.14,"mem_mb":14.7,"disk_size":"47.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.8,"mem_mb":14.7,"disk_size":"48M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.19,"mem_mb":14.7,"disk_size":"48M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.58,"mem_mb":11.6,"disk_size":"52.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.74,"mem_mb":11.6,"disk_size":"52.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5,"import_time_s":0.54,"mem_mb":11.6,"disk_size":"53M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"requests-aws-sign","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.78,"mem_mb":11.6,"disk_size":"53M"}]}}