{ "info": { "author": "ruifengyun", "author_email": "rfyiamcool@163.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.0", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "### \u4ecb\u7ecd\n\n\u7528tornado\u5b9e\u73b0\u7684\u9ad8\u6027\u80fd\u4ee3\u7406\u670d\u52a1\u5668\uff0c\u6db5\u76d6\u4e86\u57fa\u672c\u7684method , \u6027\u80fd\u65b9\u9762\u7ecf\u8fc7\u6211\u7684\u6d4b\u8bd5\uff0c\u4ed6\u6bcf\u79d2\u5e73\u5747\u5728300\u4e2a\u8bbf\u95ee,\u5982\u679c\u5728tornado\u52a0\u5165threadpool\u903b\u8f91\uff0c\u5e76\u53d1\u4f30\u8ba1\u4f1a\u78341k \u3002\n\n\u5bf9\u4e8ehttps\u7684\u652f\u6301\u4f1a\u6709\u4e9b\u95ee\u9898\uff0c\u6211\u540e\u671f\u4f1a\u589e\u5f3atornado httpclient\u5bf9\u4e8essl\u7684\u652f\u6301\uff0c\u53e6\u5916\u5bf9\u4e8e\u9ad8\u6027\u80fd\u65b9\u9762\u4f1a\u52a0\u5165gevent\u3002\n\n[toproxy \u66f4\u591a\u4ecb\u7ecd](http://xiaorui.cc \"xiaorui.cc\")\n\n### \u539f\u7406\n\u4f60\u901a\u8fc7http client\u9644\u52a0proxy\u5730\u5740\u8bbf\u95ee\u9875\u9762\uff0c\u6211\u901a\u5e38\u4f1a\u89e3\u6790\u4f60\u7684\u8bbf\u95ee\uff0c\u7136\u540e\u6211\u81ea\u5df1\u518d\u53bb\u8bbf\u95ee\u4f60\u521a\u624d\u63d0\u4ea4\u7684\u9875\u9762\uff0c\u7136\u540e\u8fd4\u56de\u4f60\u7ed3\u679c\u3002\n\u5f53\u7136\u5728\u534f\u8bae\u4e0a\u6765\u8bf4\uff0c\u8fd9\u867d\u7136\u4e0d\u662f\u6700\u9ad8\u6027\u80fd\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u6700\u7b80\u5355\u6709\u6548\u7684\u65b9\u6cd5.... \u5982\u679c\u662f\u5e95\u5c42\u7684socket\u6765\u5199\uff0c\u6211\u9996\u5148\u9700\u8981\u89e3\u6790\u4f60\u7684\u5404\u79cd\u5404\u6837\u7684header\u8bf7\u6c42\uff0c\u7136\u540e\u8fd8\u8981\u8003\u8651\u591a\u4efb\u52a1\u7684\u6a21\u5757\uff0c\u6216 prefork \u6216 \u5f02\u6b65\u6a21\u5f0f\uff0c \u8fd9\u90fd\u662f\u5f00\u53d1\u7684\u6210\u672c\u3002 \u6211\u8fd9\u91cc\u662f\u7528tornado\u8fd9\u5f02\u6b65\u6846\u67b6\uff0c\u672c\u8eab\u89e3\u51b3\u4e86\u5404\u4e2a\u6d41\u7a0b\u7684\u5835\u585e\u95ee\u9898\uff0c\u7136\u53c8\u7528\u5f02\u6b65\u7684 httpclient,\u907f\u514d\u4e86\u6211\u8bf7\u6c42url\u65f6\u7684\u5835\u585e\u3002 \n\nNew Future\n\n1. \u52a0\u5165\u4e86\u767d\u540d\u5355\u529f\u80fd\n\n2. \u5f53\u8bbf\u95ee\u7684\u5730\u5740\u8fde\u63a5\u5931\u8d25\u7684\u65f6\u5019\uff0c\u4f1a\u505a\u91cd\u8bd5\u673a\u5236\n\n3. support 301 redirect\n\n4. \u52a0\u5165\u4e86\u57fa\u672c\u8ba4\u8bc1\n\n5. \u7b80\u5355\u9632\u5fa1AB\u538b\u6d4b\n\n\u66f4\u591a\u7684httpclient\u6587\u6863\uff0c[httpclient \u66f4\u591a\u6587\u6863](http://tornado.readthedocs.org/en/latest/httpclient.html \"tornado httpclient\") \n\n### \u5b89\u88c5 \n\n \u65b9\u6cd51:\n pip install toproxy\n\n \u65b9\u6cd52:\n \u4f9d\u8d56tornado \n python setup.py install\n\n### \u76f4\u63a5\u4f7f\u7528\n ```\n python toproxy/proxy.py -h\n\n usage: proxy.py [-h] [-p PORT] [-w WHITE] [-u USER]\n \n python -m toproxy/proxy -p 8888 -w 127.0.0.1,8.8.8.8 -u xiaorui:fengyun\n \n optional arguments:\n -h, --help show this help message and exit\n -p PORT, --port PORT tonado proxy listen port\n -w WHITE, --white WHITE\n white ip list ---> 127.0.0.1,215.8.1.3\n -u USER, --user USER Base Auth , xiaoming:123123\n ```\n\n \u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u7aef\u53e3\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u767d\u540d\u5355ip\u5730\u5740\u3002 \n \u65b9\u6cd51:\n python -m toproxy/proxy -p 8888 -w 127.0.0.1 -u xiaorui:123\n python -m toproxy/proxy\n ::::Starting HTTP proxy on port 8888\n\n \u65b9\u6cd52:\n python toproxy \n\n\n### \u6a21\u5757\u7684\u8c03\u7528\n\n from toproxy import run_proxy\n run_proxy(port, start_ioloop=False)\n ...\n tornado.ioloop.IOLoop.instance().start()\n\n\n### test\n\n curl -vvv -x xiaorui.cc:8888 http://www.google.com\n\n ab -X xiaorui.cc:8888 -c 200 -n 1000 http://www.hao123.com/ \n \n ```\n his is ApacheBench, Version 2.3 <$Revision: 655654 $>\n Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n Licensed to The Apache Software Foundation, http://www.apache.org/\n \n Benchmarking www.hao123.com (be patient)\n Completed 100 requests\n Completed 200 requests\n Completed 300 requests\n Completed 400 requests\n Completed 500 requests\n Completed 600 requests\n Completed 700 requests\n Completed 800 requests\n Completed 900 requests\n Completed 1000 requests\n Finished 1000 requests\n \n \n Server Software: BWS/1.0\n Server Hostname: www.hao123.com\n Server Port: 80\n \n Document Path: /\n Document Length: 750380 bytes\n \n Concurrency Level: 200\n Time taken for tests: 7.967 seconds\n Complete requests: 1000\n Failed requests: 10\n (Connect: 0, Receive: 0, Length: 10, Exceptions: 0)\n Write errors: 0\n Total transferred: 752184936 bytes\n HTML transferred: 751671400 bytes\n Requests per second: 125.52 [#/sec] (mean)\n Time per request: 1593.406 [ms] (mean)\n Time per request: 7.967 [ms] (mean, across all concurrent requests)\n Transfer rate: 92199.44 [Kbytes/sec] received\n \n Connection Times (ms)\n min mean[+/-sd] median max\n Connect: 24 40 94.6 31 1034\n Processing: 289 1371 786.8 1223 4028\n Waiting: 46 57 27.8 55 663\n Total: 317 1411 791.2 1276 4059\n \n Percentage of the requests served within a certain time (ms)\n 50% 1276\n 66% 1751\n 75% 2030\n 80% 2208\n 90% 2510\n 95% 2768\n 98% 3187\n 99% 3389\n 100% 4059 (longest request)\n ```\n\n### todo\n\n1. \u63d0\u9ad8toproxy\u7684\u6027\u80fd\n2. \u52a0\u5165\u5f02\u6b65\u56de\u8c03\u901a\u77e5\u6a21\u5f0f\n3. \u6279\u91cf\u4f20\u9001\n4. \u4f5c\u4e3a\u4ee3\u7406\u5b89\u5168\u7684\u57fa\u672c\u8ba4\u8bc1", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://xiaorui.cc", "keywords": "tornado proxy,fengyun", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "toproxy", "package_url": "https://pypi.org/project/toproxy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/toproxy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://xiaorui.cc" }, "release_url": "https://pypi.org/project/toproxy/3.2/", "requires_dist": null, "requires_python": null, "summary": "Simple Tornado Async HTTP Proxy", "version": "3.2" }, "last_serial": 1816362, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "ba4b48dbd3a83c13ceaca0b9a1434889", "sha256": "b5345ba494d0eb8fda2378b90c8460078d115ae8161e4fea4fb1129a98a61982" }, "downloads": -1, "filename": "toproxy-0.1.tar.gz", "has_sig": false, "md5_digest": "ba4b48dbd3a83c13ceaca0b9a1434889", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3861, "upload_time": "2015-08-20T23:53:21", "url": "https://files.pythonhosted.org/packages/c0/d7/9d8d958132e7e84c8afab80ac81f57b8371fecae6c0c81971457cc30bf89/toproxy-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "46cd3516bd7a800009b9a1a09345d6c2", "sha256": "d78949232000f32f0143e04b575e75c77faab6236220f85aec1aff8866a90baf" }, "downloads": -1, "filename": "toproxy-0.2.tar.gz", "has_sig": false, "md5_digest": "46cd3516bd7a800009b9a1a09345d6c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3922, "upload_time": "2015-08-20T23:55:44", "url": "https://files.pythonhosted.org/packages/01/3e/5d7294800e935f82599e92dd9ea2052d33e1426ebb0816892a71512396ff/toproxy-0.2.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "66add82c255952474f3218a2ab890d98", "sha256": "138d4f39a7b436d493541665dc276a017fb98271e07d0c5cdee4f47c69d531d8" }, "downloads": -1, "filename": "toproxy-0.5.tar.gz", "has_sig": false, "md5_digest": "66add82c255952474f3218a2ab890d98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3936, "upload_time": "2015-08-20T23:56:56", "url": "https://files.pythonhosted.org/packages/5f/52/3d9d0207846db717bb88df35301fe3ab4850569daef92d1178df11b35744/toproxy-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "bb54d1737c38fca981155f78115861c4", "sha256": "6bc9ccd86a4976fb1b742491957e79c7bc5713d3d9893e79e662871f79c6adcf" }, "downloads": -1, "filename": "toproxy-0.6.tar.gz", "has_sig": false, "md5_digest": "bb54d1737c38fca981155f78115861c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4009, "upload_time": "2015-08-20T23:59:51", "url": "https://files.pythonhosted.org/packages/85/2c/c2b55ba75ff9ef05d5fe257c98d90b11a0c2f2ce813e67a571aa90095f8b/toproxy-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "8301a27f6274f2b89c4db415e6a885f5", "sha256": "bab959789485ead993aa1eca2539104ea61b84782bdf5dfb90b75fe4427d4232" }, "downloads": -1, "filename": "toproxy-0.7.tar.gz", "has_sig": false, "md5_digest": "8301a27f6274f2b89c4db415e6a885f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4304, "upload_time": "2015-08-21T00:05:32", "url": "https://files.pythonhosted.org/packages/97/eb/7029416f6d5385de2ed0bbd4b4f484fec3e09bc8fffa5822c0e781f1c4c6/toproxy-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "e474a0f9b490c7f6dbce76b2c6750191", "sha256": "3a4bc549ea7c9bdb03e9888781d45f6b3ca985ef0f11a474a185a728de18aa1b" }, "downloads": -1, "filename": "toproxy-0.8.tar.gz", "has_sig": false, "md5_digest": "e474a0f9b490c7f6dbce76b2c6750191", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4328, "upload_time": "2015-08-21T00:10:45", "url": "https://files.pythonhosted.org/packages/24/be/88046dd588da8d462000e44924d4d2f98fda05dfb0d2999ce43a21e0e954/toproxy-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "c46b422221e8d90d2ac2837c648db1fd", "sha256": "46d7a9860181b6bc81b2da2a67c1041103b2e6e92f9837363da717d59241cb1e" }, "downloads": -1, "filename": "toproxy-0.9.tar.gz", "has_sig": false, "md5_digest": "c46b422221e8d90d2ac2837c648db1fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4440, "upload_time": "2015-08-21T00:25:00", "url": "https://files.pythonhosted.org/packages/e7/04/9726885aee7d6d6bb75c0ffe8662e6883d86a1888d62d63046d788b667e9/toproxy-0.9.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "cad3d95cd53c8ae7c4b3498f61e4a5e4", "sha256": "d431f4d37e199b848ecf4971f17f74b2cf1d8f606837647b847fb573c5292197" }, "downloads": -1, "filename": "toproxy-1.1.tar.gz", "has_sig": false, "md5_digest": "cad3d95cd53c8ae7c4b3498f61e4a5e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4442, "upload_time": "2015-08-21T00:26:04", "url": "https://files.pythonhosted.org/packages/28/50/72edf7e694d7d7dc54778430e47b7ccbe4b8d2155cebd986334425c6ce07/toproxy-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "bbf22f4ed06e8e093b5a5402354e58a3", "sha256": "d0be27c65d4d6e9044c26b619b9664c64e67197e7b67c5f785e5c63d5e2ddd2c" }, "downloads": -1, "filename": "toproxy-1.2.tar.gz", "has_sig": false, "md5_digest": "bbf22f4ed06e8e093b5a5402354e58a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4449, "upload_time": "2015-08-21T01:42:43", "url": "https://files.pythonhosted.org/packages/b7/84/b0e7a4f338707f957851b4954b101dfb983c5174065fe24eb39a64d7abfa/toproxy-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "83708dfcc0d2ed1da9db205c3c8aa551", "sha256": "15d222246cc1323e18acbf4ad9bfcc0b3ace5ab06bb906c782f2755e24619117" }, "downloads": -1, "filename": "toproxy-1.3.tar.gz", "has_sig": false, "md5_digest": "83708dfcc0d2ed1da9db205c3c8aa551", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4761, "upload_time": "2015-08-23T08:52:57", "url": "https://files.pythonhosted.org/packages/22/9b/3b01ce9ce9abc2b85e19ed170b1230c1f5938d23af7136f85930b14cee26/toproxy-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "b181176108ccaf61010c1aa575c125fc", "sha256": "22ee7dae0b91c5133e0e332e02eeb956742bdea04d296a7e1669605c36422b22" }, "downloads": -1, "filename": "toproxy-1.4.tar.gz", "has_sig": false, "md5_digest": "b181176108ccaf61010c1aa575c125fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4807, "upload_time": "2015-08-23T14:01:34", "url": "https://files.pythonhosted.org/packages/b3/86/6f85a362ec8a96e833a6c614c93cbc9f509728e2b90c5a89bb5dbbcf89a4/toproxy-1.4.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "91f0779bfbb7cf9ebd64251cfcbe62b2", "sha256": "9b9e502c9c39b804450009ad5caccb0cd98a072ae7903c1cd7f3979e2069cef3" }, "downloads": -1, "filename": "toproxy-2.0.tar.gz", "has_sig": false, "md5_digest": "91f0779bfbb7cf9ebd64251cfcbe62b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5417, "upload_time": "2015-08-25T15:21:12", "url": "https://files.pythonhosted.org/packages/75/89/72e27574b586a2711d1c24285b2adfe7f1248fd29926250dd4c53f48e722/toproxy-2.0.tar.gz" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "ae0478357af9de422a9b6409b82df473", "sha256": "ca9886af06b6f888e78c9fd4b854e3c917633e52ba8516483f441afc22123b0a" }, "downloads": -1, "filename": "toproxy-3.0.tar.gz", "has_sig": false, "md5_digest": "ae0478357af9de422a9b6409b82df473", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5687, "upload_time": "2015-09-06T10:58:18", "url": "https://files.pythonhosted.org/packages/91/5e/8f481c69e93f6daa887b4551bef296a9b8fb0ec8c73d73d0cfc548b8e6d6/toproxy-3.0.tar.gz" } ], "3.2": [ { "comment_text": "", "digests": { "md5": "97f652a356ce39927f68b66bed06adf0", "sha256": "abfe6fe64b50f324b337debb7a24376779125ec2bcf40382e3001f40e407c077" }, "downloads": -1, "filename": "toproxy-3.2.tar.gz", "has_sig": false, "md5_digest": "97f652a356ce39927f68b66bed06adf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5796, "upload_time": "2015-11-14T16:07:40", "url": "https://files.pythonhosted.org/packages/85/c4/c059e3cc12175c432676a44378319a209d64aea70f5fcded4ec084bee8c3/toproxy-3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "97f652a356ce39927f68b66bed06adf0", "sha256": "abfe6fe64b50f324b337debb7a24376779125ec2bcf40382e3001f40e407c077" }, "downloads": -1, "filename": "toproxy-3.2.tar.gz", "has_sig": false, "md5_digest": "97f652a356ce39927f68b66bed06adf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5796, "upload_time": "2015-11-14T16:07:40", "url": "https://files.pythonhosted.org/packages/85/c4/c059e3cc12175c432676a44378319a209d64aea70f5fcded4ec084bee8c3/toproxy-3.2.tar.gz" } ] }