{ "info": { "author": "Valentin Podkamennyi, Alex Krailo", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# CGI Proxy [![Build Status](https://travis-ci.org/Datamart/CGI-Proxy.svg?branch=master)](https://travis-ci.org/Datamart/CGI-Proxy) [![License](http://img.shields.io/:license-apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) [![PyPI Version](https://img.shields.io/pypi/v/cgiproxy.svg)](https://pypi.org/project/cgiproxy/) [![Python Versions](https://img.shields.io/pypi/pyversions/cgiproxy.svg)](https://pypi.org/project/cgiproxy/)\n\nSimple CGI HTTP Proxy.\n* Sets the `X-Forwarded-For` header with the client IP address;\n* Sets the `User-Agent` header with the client' `User-Agent` string;\n* Decodes `gzip`-ed content;\n* Prints all errors to `stderr`;\n* Uses `urllib2` for Python 2 and `urllib.request` for Python 3.\n\n## Installation\n\nInstall from PyPI using `pip`:\n\n```bash\n$ pip install cgiproxy\n```\n\n\n## Methods\n\n### do_get(url, headers=None)\nPerforms `GET` request.\n\n**Arguments:**\n* `url` - The request URL as `str`.\n* `headers` - Optional HTTP request headers as `dict`.\n\n**Returns:**\n* A tuple of `(content, status_code, response_headers)`\n\n\n### do_head(url, headers=None)\nPerforms `HEAD` request.\n\n**Arguments:**\n* `url` - The request URL as `str`.\n* `headers` - Optional HTTP request headers as `dict`.\n\n**Returns:**\n* A tuple of `(content='', status_code, response_headers)`\n\n\n### do_post(url, data=None, headers=None)\nPerforms `POST` request. Converts query to `POST` params if `data` is `None`.\n\n**Arguments:**\n* `url` - The request URL as `str`.\n* `data` - Optional HTTP POST data as URL-encoded `str`.\n* `headers` - Optional HTTP request headers as `dict`.\n\n**Returns:**\n* A tuple of `(content, status_code, response_headers)`\n\n\n### get_http_status(url, headers=None)\nGets HTTP status code.\n\n**Arguments:**\n* `url` - The request URL as `str`.\n* `headers` - Optional HTTP request headers as `dict`.\n\n**Returns:**\n* An HTTP status code.\n\n\n### get_response_headers(url, headers=None)\nGets HTTP response headers.\n\n**Arguments:**\n* `url` - The request URL as `str`.\n* `headers` - Optional HTTP request headers as `dict`.\n\n**Returns:**\n* An HTTP response headers as `dict`.\n\n\n## Examples\n\n```python\nimport cgiproxy\n\nstatus = cgiproxy.get_http_status('https://www.pageportrait.com/')\nprint(200 == status)\n\nheaders = cgiproxy.get_response_headers('https://komito.net/')\nprint(headers.get('content-type'))\n\ncontent, status, headers = cgiproxy.do_head('https://www.dtm.io/')\nprint('' == content)\nprint(200 == status)\nprint(headers.get('content-type'))\n\ncontent, status, headers = cgiproxy.do_get('https://www.dtm.io/', headers={\n 'User-Agent': 'Mozilla/5.0 (compatible; Darwin/18.2.0) cgiproxy/18.12',\n 'X-Custom-Header': 'value'\n})\nprint('' != content)\nprint(200 == status)\nprint(headers.get('content-type'))\n\ncontent, status, headers = cgiproxy.do_post('https://example.com/', data='aaa%3Dbbb%26ccc%3Dddd')\nprint('' != content)\nprint(200 == status)\nprint(headers.get('content-type'))\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Datamart/CGI-Proxy", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "cgiproxy", "package_url": "https://pypi.org/project/cgiproxy/", "platform": "", "project_url": "https://pypi.org/project/cgiproxy/", "project_urls": { "Homepage": "https://github.com/Datamart/CGI-Proxy" }, "release_url": "https://pypi.org/project/cgiproxy/18.12.28/", "requires_dist": null, "requires_python": "", "summary": "The simple HTTP proxy.", "version": "18.12.28" }, "last_serial": 4642549, "releases": { "10.28": [ { "comment_text": "", "digests": { "md5": "1c9bb03e2e8e7bc9d403c2121f803496", "sha256": "884fc24d42c8c7bf7a27474e493851ee639acaa9ee1cf26a9ee8e7f381ba5fbc" }, "downloads": -1, "filename": "cgiproxy-10.28-py3-none-any.whl", "has_sig": false, "md5_digest": "1c9bb03e2e8e7bc9d403c2121f803496", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11223, "upload_time": "2018-10-15T18:38:55", "url": "https://files.pythonhosted.org/packages/19/06/58625c337b17c106107f00a6b06510d4158799bdcfbd1406acc008fb6e93/cgiproxy-10.28-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc9930a5c9c619c9889be954f2990cfa", "sha256": "02cbfa5bd3ccf156b00268cd20877f171e7e805cced446292db4558cf1db7986" }, "downloads": -1, "filename": "cgiproxy-10.28.tar.gz", "has_sig": false, "md5_digest": "cc9930a5c9c619c9889be954f2990cfa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3636, "upload_time": "2018-10-15T18:38:59", "url": "https://files.pythonhosted.org/packages/7d/e2/52eb50532b6034d44bd40c12b2be616836cfaf814fff330fbcd9c0d35e2f/cgiproxy-10.28.tar.gz" } ], "10.29": [ { "comment_text": "", "digests": { "md5": "5ca72c8a1f6134beb00f863c885a2ab7", "sha256": "8272f1ca72db906447ff10ece625f1a87ef0d3d2aacaedfdbf9c883b248636c5" }, "downloads": -1, "filename": "cgiproxy-10.29-py3-none-any.whl", "has_sig": false, "md5_digest": "5ca72c8a1f6134beb00f863c885a2ab7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11258, "upload_time": "2018-10-15T18:38:56", "url": "https://files.pythonhosted.org/packages/41/fa/c416c570dfebc96e9baf9c7afce4ba36dd7776690852ac3f2a15662355bd/cgiproxy-10.29-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5147b46b89f7e7c4badfab50bc12918f", "sha256": "4f14b5173bb5206bc3e088e0ae64bb98401a41a2999fff53667f4b76759a3430" }, "downloads": -1, "filename": "cgiproxy-10.29.tar.gz", "has_sig": false, "md5_digest": "5147b46b89f7e7c4badfab50bc12918f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3638, "upload_time": "2018-10-15T18:39:00", "url": "https://files.pythonhosted.org/packages/a2/12/7d6e7115c151be06fdeac14006abcfa6da8075058d0ee663ee86afb1b84c/cgiproxy-10.29.tar.gz" } ], "10.30": [ { "comment_text": "", "digests": { "md5": "5c8337fb876cbaa7211ce3949d76f0b4", "sha256": "b226e288a039a29ccc53bbeb3699d5427e034c4845611f37c335997bdd8476ec" }, "downloads": -1, "filename": "cgiproxy-10.30-py3-none-any.whl", "has_sig": false, "md5_digest": "5c8337fb876cbaa7211ce3949d76f0b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13106, "upload_time": "2018-10-15T18:44:56", "url": "https://files.pythonhosted.org/packages/5e/39/28b261e6fa892366a9ab3105d94255231f8e8356e99952eb041bbfc8dc63/cgiproxy-10.30-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4bef425963662d14ed05d2a75fafe074", "sha256": "3f8cd0b1169a87ff07572ba5b59da1e6a56438025c58396764e5b6e78f853742" }, "downloads": -1, "filename": "cgiproxy-10.30.tar.gz", "has_sig": false, "md5_digest": "4bef425963662d14ed05d2a75fafe074", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3543, "upload_time": "2018-10-15T18:44:57", "url": "https://files.pythonhosted.org/packages/aa/19/fb3b20b3cb0a78ad38906cce0e52bb7d41e42d9336d62b21b6a1083bc077/cgiproxy-10.30.tar.gz" } ], "10.31": [ { "comment_text": "", "digests": { "md5": "f332f9e91f74ad1bec5621e14066de2a", "sha256": "adb1d45a467055c89ec2fc5f1e8e6ac31f7eaf669596b572172f6d84ad132339" }, "downloads": -1, "filename": "cgiproxy-10.31-py3-none-any.whl", "has_sig": false, "md5_digest": "f332f9e91f74ad1bec5621e14066de2a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13108, "upload_time": "2018-10-15T18:59:47", "url": "https://files.pythonhosted.org/packages/23/99/329623da32072b98d9834ab7b64d989402a43b94419153ee27fbc48afc7f/cgiproxy-10.31-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "736af909dda6a276ee7c2ba3c80029be", "sha256": "167f4412faaf6c72a8b9aeec3e0c55947900cb096f3aee95ee25a11458e9b352" }, "downloads": -1, "filename": "cgiproxy-10.31.tar.gz", "has_sig": false, "md5_digest": "736af909dda6a276ee7c2ba3c80029be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3549, "upload_time": "2018-10-15T18:59:49", "url": "https://files.pythonhosted.org/packages/d3/97/8ff32846ceb98a9848aeb4d47ccf9124209df003e6afba3db8c07124dabc/cgiproxy-10.31.tar.gz" } ], "10.32": [ { "comment_text": "", "digests": { "md5": "a53bd0c730c7a0cba45403f935c6cfbb", "sha256": "4710ea4e5ebf308f627b7520d0df5b7dc9a4657ad5794ee8389aae2be71bc4b7" }, "downloads": -1, "filename": "cgiproxy-10.32-py3-none-any.whl", "has_sig": false, "md5_digest": "a53bd0c730c7a0cba45403f935c6cfbb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13130, "upload_time": "2018-10-16T00:03:50", "url": "https://files.pythonhosted.org/packages/8c/42/280b092dc609843aa672a1a873624e18eb03cb422f4c9b6e56f4ff2f467c/cgiproxy-10.32-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5464f3222aa3c950be55ec762fcb3718", "sha256": "71784841cafca810a84ef76e7faf3fe895d85c0a32d43199bfd34a01830ab4ee" }, "downloads": -1, "filename": "cgiproxy-10.32.tar.gz", "has_sig": false, "md5_digest": "5464f3222aa3c950be55ec762fcb3718", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3570, "upload_time": "2018-10-16T00:03:51", "url": "https://files.pythonhosted.org/packages/26/50/0ff180b99804b7037757e91b9e790855920e42458cf5c55400aec21cbe29/cgiproxy-10.32.tar.gz" } ], "18.12": [ { "comment_text": "", "digests": { "md5": "1cdb050a5ec0c9e1ee81e9ef7d001748", "sha256": "13d564af739b575b73427064c3840e0e95d770c36153276adcdbf5b3c7aec7f3" }, "downloads": -1, "filename": "cgiproxy-18.12-py3-none-any.whl", "has_sig": false, "md5_digest": "1cdb050a5ec0c9e1ee81e9ef7d001748", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8392, "upload_time": "2018-12-26T01:55:08", "url": "https://files.pythonhosted.org/packages/88/c9/2eaef76cb46c10d05fc7aa56909cc8232aac2b4241ff232e1d355377cb1c/cgiproxy-18.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66635b0ffd0cbf820f3223e1cc6cdc27", "sha256": "d79f23a820689549109d88f231aed1f878155d6db30ecb2b7226865d71754bf4" }, "downloads": -1, "filename": "cgiproxy-18.12.tar.gz", "has_sig": false, "md5_digest": "66635b0ffd0cbf820f3223e1cc6cdc27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4021, "upload_time": "2018-12-26T01:55:10", "url": "https://files.pythonhosted.org/packages/c1/24/0cd00024ff83c7e3b6bf6c6123e10fd9bcbfc86648e25c257b2f6cdb3d36/cgiproxy-18.12.tar.gz" } ], "18.12.25": [ { "comment_text": "", "digests": { "md5": "26febbaa44e6cbf6c7843a209e577d20", "sha256": "896292857c51a77d9dc17f4f36199abfba0259407e3c89083860cd0c67d15ce6" }, "downloads": -1, "filename": "cgiproxy-18.12.25-py3-none-any.whl", "has_sig": false, "md5_digest": "26febbaa44e6cbf6c7843a209e577d20", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9076, "upload_time": "2018-12-26T03:01:43", "url": "https://files.pythonhosted.org/packages/96/90/eaeb5747a8faae10f174b04f850bcd80e224cb3ac48344dbd4d60667723c/cgiproxy-18.12.25-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a41ac0700012cd5e6e484b7eb8ebbcb0", "sha256": "de75de58c74372f4bda36da2ce169b51203e10eb56f235ff4eb6cdfde10a5d6e" }, "downloads": -1, "filename": "cgiproxy-18.12.25.tar.gz", "has_sig": false, "md5_digest": "a41ac0700012cd5e6e484b7eb8ebbcb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4751, "upload_time": "2018-12-26T03:01:45", "url": "https://files.pythonhosted.org/packages/e5/84/be3870d03a114dfad09a5fd3a82e556321dc05b29326f13ea6e13e2b178e/cgiproxy-18.12.25.tar.gz" } ], "18.12.28": [ { "comment_text": "", "digests": { "md5": "645820da12f7695bc9c8d4602dd91412", "sha256": "db7affdf87c86a8f6a9c30e70aaa169b86b7fdcd8c10c2439adc5350af4f790f" }, "downloads": -1, "filename": "cgiproxy-18.12.28-py3-none-any.whl", "has_sig": false, "md5_digest": "645820da12f7695bc9c8d4602dd91412", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9109, "upload_time": "2018-12-28T22:00:47", "url": "https://files.pythonhosted.org/packages/a8/22/4ea2880e470076f6373c47d997c5dc64a59b11ad1d42608e16ad9b91197b/cgiproxy-18.12.28-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c836b25b614207e9d76fa5823c98e7d5", "sha256": "13342558a08cf893c453ccecc0589f2bad77740bf5981e3bc7fc4a0aa1ba3035" }, "downloads": -1, "filename": "cgiproxy-18.12.28.tar.gz", "has_sig": false, "md5_digest": "c836b25b614207e9d76fa5823c98e7d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4796, "upload_time": "2018-12-28T22:00:48", "url": "https://files.pythonhosted.org/packages/1f/94/1e88b8b6ca4ad34a664288bd68cd8f64af920b8ccded54c97b244bf329d1/cgiproxy-18.12.28.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "645820da12f7695bc9c8d4602dd91412", "sha256": "db7affdf87c86a8f6a9c30e70aaa169b86b7fdcd8c10c2439adc5350af4f790f" }, "downloads": -1, "filename": "cgiproxy-18.12.28-py3-none-any.whl", "has_sig": false, "md5_digest": "645820da12f7695bc9c8d4602dd91412", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9109, "upload_time": "2018-12-28T22:00:47", "url": "https://files.pythonhosted.org/packages/a8/22/4ea2880e470076f6373c47d997c5dc64a59b11ad1d42608e16ad9b91197b/cgiproxy-18.12.28-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c836b25b614207e9d76fa5823c98e7d5", "sha256": "13342558a08cf893c453ccecc0589f2bad77740bf5981e3bc7fc4a0aa1ba3035" }, "downloads": -1, "filename": "cgiproxy-18.12.28.tar.gz", "has_sig": false, "md5_digest": "c836b25b614207e9d76fa5823c98e7d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4796, "upload_time": "2018-12-28T22:00:48", "url": "https://files.pythonhosted.org/packages/1f/94/1e88b8b6ca4ad34a664288bd68cd8f64af920b8ccded54c97b244bf329d1/cgiproxy-18.12.28.tar.gz" } ] }