{ "info": { "author": "reorx", "author_email": "novoreorx@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# httpstat\n\n![screenshot](screenshot.png)\n\nhttpstat visualizes `curl(1)` statistics in a way of beauty and clarity.\n\nIt is a **single file\ud83c\udf1f** Python script that has **no dependency\ud83d\udc4f** and is compatible with **Python 3\ud83c\udf7b**.\n\n\n## Installation\n\nThere are three ways to get `httpstat`:\n\n- Download the script directly: `wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py`\n\n- Through pip: `pip install httpstat`\n\n- Through homebrew (macOS only): `brew install httpstat`\n\n\n## Usage\n\nSimply:\n\n```bash\npython httpstat.py httpbin.org/get\n```\n\nIf installed through pip or brew, you can use `httpstat` as a command:\n\n```bash\nhttpstat httpbin.org/get\n```\n\n### cURL Options\n\nBecause `httpstat` is a wrapper of cURL, you can pass any cURL supported option after the url (except for `-w`, `-D`, `-o`, `-s`, `-S` which are already used by `httpstat`):\n\n```bash\nhttpstat httpbin.org/post -X POST --data-urlencode \"a=b\" -v\n```\n\n### Environment Variables\n\n`httpstat` has a bunch of env vars to control its behavior. Here are some usage demos, you can also run `httpstat --help` to see full explanation.\n\n
\nHTTPSTAT_SHOW_BODY\n\nSet to `true` to show resposne body in the output, note that body length\nis limited to 1023 bytes, will be truncated if exceeds. Default is `false`.\n
\n\n\n
\nHTTPSTAT_SHOW_IP\n\nBy default httpstat shows remote and local IP/port address.\nSet to `false` to disable this feature. Default is `true`.\n
\n\n\n
\nHTTPSTAT_SHOW_SPEED\n\nSet to `true` to show download and upload speed. Default is `false`.\n\n```bash\nHTTPSTAT_SHOW_SPEED=true httpstat http://cachefly.cachefly.net/10mb.test\n\n...\nspeed_download: 3193.3 KiB/s, speed_upload: 0.0 KiB/s\n```\n
\n\n\n
\nHTTPSTAT_SAVE_BODY\n\nBy default httpstat stores body in a tmp file,\nset to `false` to disable this feature. Default is `true`\n
\n\n\n
\nHTTPSTAT_CURL_BIN\n\nIndicate the cURL bin path to use. Default is `curl` from current shell $PATH.\n\nThis exampe uses brew installed cURL to make HTTP2 request:\n\n```bash\nHTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2\n\nHTTP/2 200\n...\n```\n\n> cURL must be compiled with nghttp2 to enable http2 feature\n> ([#12](https://github.com/reorx/httpstat/issues/12)).\n
\n\n\n
\nHTTPSTAT_DEBUG\n\nSet to `true` to see debugging logs. Default is `false`\n
\n\n\n## Related Projects\n\nHere are some implementations in various languages:\n\n- Bash: [b4b4r07/httpstat](https://github.com/b4b4r07/httpstat)\n\n This is what exactly I want to do at the very beginning, but gave up due to not confident in my bash skill, good job!\n\n- Node: [yosuke-furukawa/httpstat](https://github.com/yosuke-furukawa/httpstat)\n\n [b4b4r07](https://twitter.com/b4b4r07) mentioned this in his [article](http://www.tellme.tokyo/entry/2016/09/25/213810), could be used as a HTTP client also.\n\n- Go: [davecheney/httpstat](https://github.com/davecheney/httpstat)\n\n I'm practicing Go recently, it's happy to read and learn from this one.\n\n- Go (library): [tcnksm/go-httpstat](https://github.com/tcnksm/go-httpstat)\n\n Other than being a cli tool, this project is used as library to help debugging latency of HTTP requests in Go code, very thoughtful and useful, see more in this [article](https://medium.com/@deeeet/trancing-http-request-latency-in-golang-65b2463f548c#.mm1u8kfnu)\n\n- PHP: [talhasch/php-httpstat](https://github.com/talhasch/php-httpstat)\n\n The PHP implementation by @talhasch\n\nSome code blocks in `httpstat` are copied from other projects of mine, have a look:\n\n- [reorx/python-terminal-color](https://github.com/reorx/python-terminal-color) Drop-in single file library for printing terminal color.\n\n- [reorx/getenv](https://github.com/reorx/getenv) Environment variable definition with type.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/reorx/httpstat", "keywords": null, "license": "License :: OSI Approved :: MIT License", "maintainer": null, "maintainer_email": null, "name": "httpstat", "package_url": "https://pypi.org/project/httpstat/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/httpstat/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/reorx/httpstat" }, "release_url": "https://pypi.org/project/httpstat/1.2.1/", "requires_dist": null, "requires_python": null, "summary": "curl statistics made simple", "version": "1.2.1" }, "last_serial": 2389355, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "595beec7d767ee1d7dc2bea5c6cc507a", "sha256": "4af07d5f913730ded3472bc77717ee1764a48d217dfa42842f149db21608a67e" }, "downloads": -1, "filename": "httpstat-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "595beec7d767ee1d7dc2bea5c6cc507a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5342, "upload_time": "2016-09-01T11:43:53", "url": "https://files.pythonhosted.org/packages/27/02/d21cbf9835759dda2eaba2b853dfdf3302991da0d756cffaca648b747750/httpstat-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "873bb68efb06417b28ba634b3f36212f", "sha256": "531c13e739a4ddeaa7b47a500fe5cdd40d6cc7544a87499934b786ba9876e188" }, "downloads": -1, "filename": "httpstat-1.0.0.tar.gz", "has_sig": false, "md5_digest": "873bb68efb06417b28ba634b3f36212f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3612, "upload_time": "2016-09-01T11:43:50", "url": "https://files.pythonhosted.org/packages/09/a7/c71bc433bd8d6a77ff45b10197cd78e7abfdc7bf356f639eba141553f569/httpstat-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "1b56992860af01e42640a0f2951d0cec", "sha256": "8b37456c26690307369542ca80f8a3378c49f1426428ff8b0717635c23d2d339" }, "downloads": -1, "filename": "httpstat-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "1b56992860af01e42640a0f2951d0cec", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5714, "upload_time": "2016-09-01T12:20:33", "url": "https://files.pythonhosted.org/packages/89/0f/60c0ebe6d7ddddfe1d3ab715a4742027dbdd0f3e7149d31bf66a935cdf81/httpstat-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53e547216745e22a29bcfdb1cdd1067f", "sha256": "6d6670ca68ce1d83a0c3d985a5b29aa66424ffbd88fea12712fc687c312196bc" }, "downloads": -1, "filename": "httpstat-1.1.0.tar.gz", "has_sig": false, "md5_digest": "53e547216745e22a29bcfdb1cdd1067f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3929, "upload_time": "2016-09-01T12:20:29", "url": "https://files.pythonhosted.org/packages/7f/54/baa251880572e038be783b18fdc54a97dda9d151cef628a36662cc3cb488/httpstat-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d37a1a69b21daf862cfe377c7b923977", "sha256": "3a7240470d982fc74984f6b60e9f006fa8f01ded2edc160ce3d36133d3a2be54" }, "downloads": -1, "filename": "httpstat-1.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "d37a1a69b21daf862cfe377c7b923977", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5711, "upload_time": "2016-09-01T12:27:37", "url": "https://files.pythonhosted.org/packages/5a/e9/58a2f89616a2c88a60267a745a196dda6f2d289c93b8d1dd4ed6a3e24172/httpstat-1.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54d8d47f1a0060d7dd4e93848d78a999", "sha256": "3d420e5228a8b93eb0841452efd28c026ce19ee00fd98698f5a87a5d939c3c5d" }, "downloads": -1, "filename": "httpstat-1.1.1.tar.gz", "has_sig": false, "md5_digest": "54d8d47f1a0060d7dd4e93848d78a999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3928, "upload_time": "2016-09-01T12:27:33", "url": "https://files.pythonhosted.org/packages/2a/e3/da1d1faf6050ff7664f80aa3dd942cfe732e90d5d126b6037a52f323819c/httpstat-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "e2ff66d7630b099d5ff1674c39f48a70", "sha256": "be04c904f65f5fb8e104f2ce9c4358a3655950b1e4565b002d0f5761a66480b0" }, "downloads": -1, "filename": "httpstat-1.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "e2ff66d7630b099d5ff1674c39f48a70", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5756, "upload_time": "2016-09-05T06:53:37", "url": "https://files.pythonhosted.org/packages/43/a6/bbcdf39f411ddae8345f1c5dbb2add0d0af535b3e3c27d54f004bdc0d28b/httpstat-1.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77e24184cb1349ce8ea20011c777986a", "sha256": "1295afdbcb485e2b29f7b264d9e320d0aeae8d4bd5bcd51f374b01c4e435d6c6" }, "downloads": -1, "filename": "httpstat-1.1.2.tar.gz", "has_sig": false, "md5_digest": "77e24184cb1349ce8ea20011c777986a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3975, "upload_time": "2016-09-05T06:53:34", "url": "https://files.pythonhosted.org/packages/b0/27/80bdb353de887ad501cde707858ad8202c852bdea848cb55dd764dd19c0b/httpstat-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "784b9ecd14caff5423eaced3edceb754", "sha256": "b3953e5c840f2f8d55b31b18827933f781277037caf74354d96cdbcd09dbac41" }, "downloads": -1, "filename": "httpstat-1.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "784b9ecd14caff5423eaced3edceb754", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5800, "upload_time": "2016-09-09T08:28:51", "url": "https://files.pythonhosted.org/packages/11/ae/28e66bb90cbb92424ee80f9118c2dd8138b3c7607fc1dc9753865c57beca/httpstat-1.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b55297d4d62cda35c1b6abe0999b67e3", "sha256": "c78e992fb31f893921ff9f4b127ff1d8d6896eb4a8f228b6b45d49ec3ab1f1c1" }, "downloads": -1, "filename": "httpstat-1.1.3.tar.gz", "has_sig": false, "md5_digest": "b55297d4d62cda35c1b6abe0999b67e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4006, "upload_time": "2016-09-09T08:28:47", "url": "https://files.pythonhosted.org/packages/cf/5e/012d5622c44303056c65d2bf511fda17ce127963a530f93691efe0c68241/httpstat-1.1.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "cabc5a4fd61359779625ce8552e494e0", "sha256": "817304dbb774fcb1143f472f4ea267d2b32f984260206bcb7e05f87504b722f0" }, "downloads": -1, "filename": "httpstat-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cabc5a4fd61359779625ce8552e494e0", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6794, "upload_time": "2016-09-27T09:46:11", "url": "https://files.pythonhosted.org/packages/f1/01/9947c7f16f5ad6a93650f4cbf91233fc2b3932408ee4d638ef409b7e7262/httpstat-1.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1eb84bad5b835e3cc6e76a34681028bb", "sha256": "67ad468f97731b744060d90222a734b21f2c89aea604be82747880542c898623" }, "downloads": -1, "filename": "httpstat-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1eb84bad5b835e3cc6e76a34681028bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4857, "upload_time": "2016-09-27T09:46:08", "url": "https://files.pythonhosted.org/packages/8d/c5/71ecf87a219a9bb7a21219fc40213809a405fbf60d37461f24b8023615e1/httpstat-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8bbb3d33252d5a83687de4dd6d3ebc1b", "sha256": "a8934a89e8a1d48bf5905f1fcb5f717bdfdca74d1644c8f3640be387398cbe8b" }, "downloads": -1, "filename": "httpstat-1.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "8bbb3d33252d5a83687de4dd6d3ebc1b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9215, "upload_time": "2016-10-09T12:58:27", "url": "https://files.pythonhosted.org/packages/b5/a8/c925a81e0c2c6a32c867c648309aeb744077a5ee95e2f604c7fdcc422577/httpstat-1.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a951c8850a000454e7d7a8679000f680", "sha256": "0ba63505a3dbc9c1b25eee86eea001caa6098e502200b5d441586d53a6151cb2" }, "downloads": -1, "filename": "httpstat-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a951c8850a000454e7d7a8679000f680", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6028, "upload_time": "2016-10-09T12:58:24", "url": "https://files.pythonhosted.org/packages/51/91/0af6ec6159b77607f70c21a9fee1024138115569c13f59cbb8e4c7e0d7b2/httpstat-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8bbb3d33252d5a83687de4dd6d3ebc1b", "sha256": "a8934a89e8a1d48bf5905f1fcb5f717bdfdca74d1644c8f3640be387398cbe8b" }, "downloads": -1, "filename": "httpstat-1.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "8bbb3d33252d5a83687de4dd6d3ebc1b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9215, "upload_time": "2016-10-09T12:58:27", "url": "https://files.pythonhosted.org/packages/b5/a8/c925a81e0c2c6a32c867c648309aeb744077a5ee95e2f604c7fdcc422577/httpstat-1.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a951c8850a000454e7d7a8679000f680", "sha256": "0ba63505a3dbc9c1b25eee86eea001caa6098e502200b5d441586d53a6151cb2" }, "downloads": -1, "filename": "httpstat-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a951c8850a000454e7d7a8679000f680", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6028, "upload_time": "2016-10-09T12:58:24", "url": "https://files.pythonhosted.org/packages/51/91/0af6ec6159b77607f70c21a9fee1024138115569c13f59cbb8e4c7e0d7b2/httpstat-1.2.1.tar.gz" } ] }