{"id":13602649,"url":"https://github.com/okigan/awscurl","last_synced_at":"2026-04-22T07:03:54.421Z","repository":{"id":43223842,"uuid":"44702033","full_name":"okigan/awscurl","owner":"okigan","description":"curl-like access to AWS resources with AWS Signature Version 4 request signing.","archived":false,"fork":false,"pushed_at":"2024-08-26T04:57:20.000Z","size":319,"stargazers_count":828,"open_issues_count":37,"forks_count":97,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-11T17:05:15.393Z","etag":null,"topics":["aws","aws-signature","curl"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/okigan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["okigan"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2015-10-21T20:22:38.000Z","updated_at":"2025-05-07T00:25:26.000Z","dependencies_parsed_at":"2024-08-26T05:07:16.142Z","dependency_job_id":null,"html_url":"https://github.com/okigan/awscurl","commit_stats":{"total_commits":254,"total_committers":36,"mean_commits":7.055555555555555,"dds":0.2913385826771654,"last_synced_commit":"2a6547300ef5592178159211eb541a1a6e08b683"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okigan%2Fawscurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okigan%2Fawscurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okigan%2Fawscurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okigan%2Fawscurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/okigan","download_url":"https://codeload.github.com/okigan/awscurl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254235695,"owners_count":22036963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-signature","curl"],"created_at":"2024-08-01T18:01:32.720Z","updated_at":"2026-03-16T07:36:35.284Z","avatar_url":"https://github.com/okigan.png","language":"Python","funding_links":["https://github.com/sponsors/okigan","https://www.paypal.com/donate/?business=UDN4FL55J34QC\u0026amount=25","https://www.buymeacoffee.com/okigan"],"categories":["aws"],"sub_categories":[],"readme":"# awscurl [![Donate](https://img.shields.io/badge/donate-github-orange.svg?style=flat-square)](https://github.com/sponsors/okigan) [![Donate](https://img.shields.io/badge/donate-paypal-orange.svg?style=flat-square)](https://www.paypal.com/donate/?business=UDN4FL55J34QC\u0026amount=25) [![Donate](https://img.shields.io/badge/donate-buy_me_a_coffee-orange.svg?style=flat-square)](https://www.buymeacoffee.com/okigan)\n\n[![PyPI](https://img.shields.io/pypi/v/awscurl.svg)](https://pypi.python.org/pypi/awscurl)\n[![Build Status](https://github.com/okigan/awscurl/actions/workflows/pythonapp.yml/badge.svg)](https://github.com/okigan/awscurl)\n[![Docker Hub](https://img.shields.io/docker/pulls/okigan/awscurl.svg)](https://hub.docker.com/r/okigan/awscurl)\n![CI badge](https://github.com/okigan/awscurl/workflows/CI/badge.svg?branch=master)\n\n[![Edit with gitpod](https://img.shields.io/badge/edit--with-gitpod-blue.svg?style=flat-square)](https://gitpod.io/#https://github.com/okigan/awscurl)\n[![Edit with vscode](https://img.shields.io/badge/edit--with-vscode-blue.svg?style=flat-square)](https://vscode.dev/github/okigan/awscurl)\n[![Edit with github codespaces](https://img.shields.io/badge/edit--with-codespaces-blue.svg?style=flat-square)](https://github.dev/okigan/awscurl)\n\ncurl-like tool with AWS Signature Version 4 request signing.\n\n## Features\n\n* performs requests to AWS services with request signing using curl interface\n* supports IAM profile credentials\n\n## Overview\n\nRequests to AWS API must be signed (see [Signing AWS API Requests](http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html))\nautomates the process of signing and makes requests to AWS as simple as a standard curl command.\n\n## Installation\n\n```sh\npip install awscurl\n```\n  \n### Installation from source (bleeding edge)\n\n```sh\npip install git+https://github.com/okigan/awscurl\n```\n\n### Installation via Homebrew for MacOS\n\n```sh\nbrew install awscurl\n```\n\n#### Running via Docker\n\n```sh\ndocker pull okigan/awscurl # or via docker pull ghcr.io/okigan/awscurl \n```\n\n  or via Github docker registry\n\n```sh\ndocker pull ghcr.io/okigan/awscurl \n```\n\n  then\n\n  ```sh\n  $ docker run --rm -it okigan/awscurl --access_key ACCESS_KEY  --secret_key SECRET_KEY --service s3 s3://...\n\n  # or allow access to local credentials as following\n  $ docker run --rm -it -v \"$HOME/.aws:/root/.aws\" okigan/awscurl --service s3 s3://...\n  ```\n\n  To shorten the length of docker commands use the following alias:\n\n  ```sh\n  alias awscurl='docker run --rm -ti -v \"$HOME/.aws:/root/.aws\" -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SECURITY_TOKEN -e AWS_PROFILE okigan/awscurl'\n  ```\n\n  This will allow you to run awscurl from within a Docker container as if it was installed on the host system:\n\n  ```sh\n  awscurl\n  ```\n\n## Examples\n\n* Call S3: List bucket content\n\n  ```sh\n  $ awscurl --service s3 'https://awscurl-sample-bucket.s3.amazonaws.com' | tidy -xml -iq\n  \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n  \u003cListBucketResult xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"\u003e\n    \u003cName\u003eawscurl-sample-bucket\u003c/Name\u003e\n    \u003cPrefix\u003e\u003c/Prefix\u003e\n    \u003cMarker\u003e\u003c/Marker\u003e\n    \u003cMaxKeys\u003e1000\u003c/MaxKeys\u003e\n    \u003cIsTruncated\u003efalse\u003c/IsTruncated\u003e\n    \u003cContents\u003e\n      \u003cKey\u003eawscurl-sample-file.txt\u003c/Key\u003e\n      \u003cLastModified\u003e2017-07-25T21:27:38.000Z\u003c/LastModified\u003e\n      \u003cETag\u003e\"d41d8cd98f00b204e9800998ecf8427e\"\u003c/ETag\u003e\n      \u003cSize\u003e0\u003c/Size\u003e\n      \u003cStorageClass\u003eSTANDARD\u003c/StorageClass\u003e\n    \u003c/Contents\u003e\n  \u003c/ListBucketResult\u003e\n  ```\n\n* Call EC2:\n\n  ```sh\n  $ awscurl --service ec2 'https://ec2.amazonaws.com?Action=DescribeRegions\u0026Version=2013-10-15' | tidy -xml -iq \n  \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n  \u003cDescribeRegionsResponse xmlns=\"http://ec2.amazonaws.com/doc/2013-10-15/\"\u003e\n\n    \u003crequestId\u003e96511ccd-2d6d-4d63-ad9b-6be6f2c9874d\u003c/requestId\u003e\n    \u003cregionInfo\u003e\n      \u003citem\u003e\n        \u003cregionName\u003eeu-north-1\u003c/regionName\u003e\n        \u003cregionEndpoint\u003eec2.eu-north-1.amazonaws.com\u003c/regionEndpoint\u003e\n      \u003c/item\u003e\n      \u003citem\u003e\n        \u003cregionName\u003eap-south-1\u003c/regionName\u003e\n        \u003cregionEndpoint\u003eec2.ap-south-1.amazonaws.com\u003c/regionEndpoint\u003e\n      \u003c/item\u003e\n    \u003c/regionInfo\u003e\n  \u003c/DescribeRegionsResponse\u003e\n  ```\n\n* Call API Gateway:\n\n  ```sh\n  $ awscurl --service execute-api -X POST -d @request.json \\\n    https://\u003cprefix\u003e.execute-api.us-east-1.amazonaws.com/\u003cresource\u003e\n  ```\n\n## Options\n\n```sh\nusage: __main__.py [-h] [-v] [-i] [-X REQUEST] [-d DATA] [-H HEADER] [-k] [--fail-with-body] [--data-binary] [--region REGION] [--profile PROFILE] [--service SERVICE]\n                   [--access_key ACCESS_KEY] [--secret_key SECRET_KEY] [--security_token SECURITY_TOKEN] [--session_token SESSION_TOKEN] [-L] [-o \u003cfile\u003e]\n                   uri\n\nCurl AWS request signing\n\npositional arguments:\n  uri\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --verbose         verbose flag (default: False)\n  -i, --include         include headers in the output (default: False)\n  -X REQUEST, --request REQUEST\n                        Specify request command to use (default: GET)\n  -d DATA, --data DATA  HTTP POST data (default: )\n  -H HEADER, --header HEADER\n                        HTTP header (default: None)\n  -k, --insecure        Allow insecure server connections when using SSL (default: False)\n  --fail-with-body      Fail on HTTP errors but save the body (default: False)\n  --data-binary         Process HTTP POST data exactly as specified with no extra processing whatsoever. (default: False)\n  --region REGION       AWS region [env var: AWS_DEFAULT_REGION] (default: us-east-1)\n  --profile PROFILE     AWS profile [env var: AWS_PROFILE] (default: default)\n  --service SERVICE     AWS service (default: execute-api)\n  --access_key ACCESS_KEY\n                        [env var: AWS_ACCESS_KEY_ID] (default: None)\n  --secret_key SECRET_KEY\n                        [env var: AWS_SECRET_ACCESS_KEY] (default: None)\n  --security_token SECURITY_TOKEN\n                        [env var: AWS_SECURITY_TOKEN] (default: None)\n  --session_token SESSION_TOKEN\n                        [env var: AWS_SESSION_TOKEN] (default: None)\n  -L, --location        Follow redirects (default: False)\n  -o \u003cfile\u003e, --output \u003cfile\u003e\n                        Write to file instead of stdout (default: )\n\n In general, command-line values override environment variables which override defaults.\n\n```\n\nIf you do not specify the `--access_key` or `--secret_key`\n(or environment variables), `awscurl` will attempt to use\nthe credentials you set in `~/.aws/credentials`. If you\ndo not specify a `--profile` or `AWS_PROFILE`, `awscurl`\nuses `default`.\n\n## Who uses awscurl\n\n* [AWS Documentation](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-how-to-call-websocket-api-connections.html)\n* [Onica blog](https://onica.com/blog/how-to/how-to-kibana-default-index-pattern/)\n* QnA on [StackOverflow](https://stackoverflow.com/search?q=awscurl)\n* QnA on [DevOps StackExchange](https://devops.stackexchange.com/search?q=awscurl)\n* Examples on [Golfbert](https://golfbert.com/api/samples)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=okigan/awscurl)](https://star-history.com/#okigan/awscurl\u0026Date)\n\n## Related projects\n\n* awscurl in Go:\n  * \u003chttps://github.com/allthings/awscurl\u003e\n  * \u003chttps://github.com/legal90/awscurl\u003e\n* awscurl in Lisp: \u003chttps://github.com/aw/picolisp-awscurl\u003e\n* awscurl on DockerHub: \u003chttps://hub.docker.com/r/okigan/awscurl\u003e\n* [aws-signature-proxy](https://github.com/sverch/aws-signature-proxy) and related [blog post](https://shaunverch.com/butter/open-source/2019/09/27/butter-days-6.html)\n* [aws-sigv4-proxy](https://github.com/awslabs/aws-sigv4-proxy) on awslabs\n\n## Last but not least\n\n* [Sponsor awscurl](https://github.com/sponsors/okigan)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokigan%2Fawscurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fokigan%2Fawscurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokigan%2Fawscurl/lists"}