{ "info": { "author": "AndreiDrang, redV0ID", "author_email": "drang.andray@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: AsyncIO", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3.6" ], "description": "\n# python-rucaptcha\n\n[![PyPI version](https://badge.fury.io/py/python-rucaptcha.svg)](https://badge.fury.io/py/python-rucaptcha)\n[![Build Status](https://semaphoreci.com/api/v1/andreidrang/python-rucaptcha-2/branches/master/shields_badge.svg)](https://semaphoreci.com/andreidrang/python-rucaptcha-2)\n[![Maintainability](https://api.codeclimate.com/v1/badges/aec93bb04a277cf0dde9/maintainability)](https://codeclimate.com/github/AndreiDrang/python-rucaptcha/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/698b08b078e94e03ab9ba8b098a2b41d)](https://app.codacy.com/app/drang.andray/python-rucaptcha?utm_source=github.com&utm_medium=referral&utm_content=AndreiDrang/python-rucaptcha&utm_campaign=Badge_Grade_Settings)\n![Callback_Server_Status Run](https://img.shields.io/badge/Callback_Server_Status-Run-blue.svg)\n\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u041f\u041e \u0438 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha.\n\n\u041f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 [\u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439](https://github.com/AndreiDrang/python-rucaptcha/tree/master/examples).\n\n**\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Python \u0432\u0435\u0440\u0441\u0438\u0438 3.6+.**\n\n## How to install? \u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c?\n\n### pip\n\n```bash\npip install python-rucaptcha\n```\n\n\n### Source\n```bash\ngit clone https://github.com/AndreiDrang/python-rucaptcha.git\ncd python-rucaptcha\npython setup.py install\n```\n***\n\u041f\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 [Telegram](https://t.me/joinchat/CD2EtQ5Pm0dmoSQQMTkVlw) \u0447\u0430\u0442.\n***\n### \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n**v.2.0** - \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 JSON \u043e\u0442\u0432\u0435\u0442\u0430, \u043a\u043b\u044e\u0447\u0430 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435(\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 `id`). \n\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 `errorBody` \u0434\u0432\u0443\u0445 \u043a\u043b\u044e\u0447\u0435\u0439: `text`(\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438) \u0438 `id`(\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043e\u0448\u0438\u0431\u043a\u0438). [\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0438 \u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438](#errors-table).\n\u0417\u0430\u043c\u0435\u043d\u0430 `errorId` \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 1/0 \u043d\u0430 `error` \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 `True`(\u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430)/`False`(\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438).\n\n**v.2.2.1** - \u0412\u044b\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043a\u0430\u043f\u0447\u0438 (\u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043a \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e) \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.\n\n**v.2.3** - \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432(\u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439) \u0438 \u0437\u0430\u043c\u0435\u043d\u0430 \u0438\u0445 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.\n\n**v.2.4** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 `callback`(pingback) \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u0438\u0434\u0430\u043c\u0438 \u043a\u0430\u043f\u0447. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 - [CallbackClient](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/CallbackClient.py). \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d [\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440(\u043d\u0430 aiohttp)](https://github.com/AndreiDrang/python-rucaptcha/blob/master/examples/callback_examples/callback_server.py) \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442 RuCaptcha, \u0430 \u0442\u0430\u043a \u0436\u0435 [`\u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 RuCaptcha`](https://github.com/AndreiDrang/python-rucaptcha/blob/master/examples/callback_examples/rucaptcha_server.py), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u044b\u043b\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0447\u0442\u043e \u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440(\u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043a\u0430\u043f\u0447\u0438). \n\n**v.2.5** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f `ReCaptcha v3`. \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f `MediaCaptcha` \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\n\n**v.2.5.3** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 `contextmanager` \u043a\u043e \u0432\u0441\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438.\n\n**v.2.5.4** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 `GeeTest` \u043c\u0435\u0442\u043e\u0434\u0430. \u0421 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c.\n\n**v.2.6.3** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 `Distil` \u043c\u0435\u0442\u043e\u0434\u0430. \u0421 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c.\n\n**v.2.6.4** - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 `HCaptcha` \u043c\u0435\u0442\u043e\u0434\u0430. \u0421 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c.\n***\n### \u0411\u0443\u0434\u0443\u0449\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\nv.3.0 - ...\n***\n### \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:\n\n0.[\u0420\u0430\u0431\u043e\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 callback(pingback)](https://github.com/AndreiDrang/python-rucaptcha/tree/master/examples/callback_examples).\n\n\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e [\u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435](https://esk.one/p/i7oKYboABXJ/)\n\n\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:\n\n```python\nimport requests\nfrom python_rucaptcha import ImageCaptcha, RuCaptchaControl, CallbackClient\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha, \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = \"\"\n# \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438\nimage_link = \"\"\n\n# \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c IP/URL(\u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0435):\nRuCaptchaControl.RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action='add_pingback', addr='http://85.255.8.26/')\n# \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\nanswer = RuCaptchaControl.RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action='get_pingback', json=1)\nprint(answer)\n\n# \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438(15+ \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438\nqueue_name = 'ba86e77f9007_andrei_drang_7436e744_cute_queue'\n# \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 callback \u0441\u0435\u0440\u0432\u0435\u0440\u0435\nanswer = requests.post(f'http://85.255.8.26:8001/register_key', json={'key':queue_name, 'vhost': 'rucaptcha_vhost'})\nprint(answer.text)\n\n# \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 RuCaptcha \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c `pingback` \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\ntask_creation_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY, \n pingback=f'85.255.8.26:8001/rucaptcha/image_captcha/{queue_name}', \n ).captcha_handler(captcha_link=image_link)\n\nprint(task_creation_answer)\n# \u0414\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f: \u043a\u0435\u0448(\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f 1 \u0447\u0430\u0441) \u0438 rabbitmq \u043e\u0447\u0435\u0440\u0435\u0434\u044c(\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f)\n# \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0436\u0434\u0451\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u0438\u0437 \u043a\u0435\u0448\u0430\ncallback_cache_response = CallbackClient.CallbackClient(task_id=task_creation_answer.get('id')).captcha_handler()\n# \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0436\u0434\u0451\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u0438\u0437 RabbitMQ queue\ncallback_queue_response = CallbackClient.CallbackClient(task_id=task_creation_answer.get('id'), queue_name=queue_name, call_type='queue').captcha_handler()\n\nprint(callback_cache_response)\nprint(callback_queue_response)\n```\n\n#### \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 callback \u0441\u0435\u0440\u0432\u0435\u0440 \u0443 \u0441\u0435\u0431\u044f:\n\n\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f-\u043f\u0430\u043c\u044f\u0442\u043a\u0430](https://github.com/AndreiDrang/python-rucaptcha/blob/master/examples/callback_examples/readme.txt) \u043f\u043e \u0448\u0430\u0433\u0430\u043c.\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u0445, \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0447\u0443\u044e, \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0430\u043c, \u043c\u0430\u0433\u0438\u044e.\n\n[\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 aiohttp](https://github.com/AndreiDrang/python-rucaptcha/blob/master/examples/callback_examples/callback_server.py).\n\n\u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u044f POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 RuCaptcha \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 [\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430](https://github.com/AndreiDrang/python-rucaptcha/blob/master/examples/callback_examples/rucaptcha_server.py).\n\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0434\u043b\u044f callback(pingback) \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 [\u043f\u0430\u043f\u043a\u0435 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438](https://github.com/AndreiDrang/python-rucaptcha/tree/master/examples), \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043a\u0430\u043f\u0447\u0438.\n\n***\n\n#### \u0420\u0430\u0431\u043e\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c - \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n\n1.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f(\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435).](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/ImageCaptcha.py)\n\n```python\nfrom python_rucaptcha import ImageCaptcha\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha, \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = \"\"\n# \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438\nimage_link = \"\"\n# \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f JSON \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438\nuser_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_link=image_link)\n\nif not user_answer['error']:\n\t# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n\tprint(user_answer['captchaSolve'])\n\tprint(user_answer['taskId'])\nelif user_answer['error']:\n\t# \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n\tprint(user_answer['errorBody']['text'])\n\tprint(user_answer['errorBody']['id'])\n```\n\n2.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 KeyCaptcha(\u043f\u0430\u0437\u043b-\u043a\u0430\u043f\u0447\u0430).](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/KeyCaptcha.py)\n\n```python\nfrom python_rucaptcha import KeyCaptcha\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha, \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = ''\n\nanswer = KeyCaptcha.KeyCaptcha(rucaptcha_key=RUCAPTCHA_KEY) \\\n\t.captcha_handler(key_params = {\n\t\t\t\t's_s_c_user_id':15,\n \t\t's_s_c_session_id':'8f460599bebe02cb0dd096b1fe70b089',\n \t\t's_s_c_web_server_sign':'edd2c221c05aece19f6db93a36b42272',\n \t\t's_s_c_web_server_sign2':'15989edaad1b4dc056ec8fa05abc7c9a',\n \t\t'pageurl':'https://www.keycaptcha.com/signup/'\n\t\t\t}\n\t)\n\n# \u043a\u0430\u043f\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430 \u0432\u0435\u0440\u043d\u043e, \u043e\u0448\u0438\u0431\u043a\u0430 = 0\nif not answer['error']:\n\t# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n\tprint(answer['captchaSolve'])\n\tprint(answer['taskId'])\n# \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043e\u0448\u0438\u0431\u043a\u0430 = 1\nelif answer['error']:\n\t# \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n\tprint(answer['errorBody'])\n``` \n\n3.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 ReCaptcha v2.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/ReCaptchaV2.py)\n\n```python\nfrom python_rucaptcha import ReCaptchaV2\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha, \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = \"\"\n# G-ReCaptcha \u043a\u043b\u044e\u0447 \u0441\u0430\u0439\u0442\u0430\nSITE_KEY = \"\"\n# \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043a\u0430\u043f\u0447\u0451\u0439\nPAGE_URL = \"\"\n# \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f JSON \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438\nuser_answer = ReCaptchaV2.ReCaptchaV2(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(site_key=SITE_KEY,\n page_url=PAGE_URL)\n\nif not user_answer['error']:\n\t# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n\tprint(user_answer['captchaSolve'])\n\tprint(user_answer['taskId'])\nelif user_answer['error']:\n\t# \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n\tprint(user_answer['errorBody']['text'])\n\tprint(user_answer['errorBody']['id'])\n```\n\n4.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 ReCaptcha v3.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/ReCaptchaV3.py)\n\n```python\nfrom python_rucaptcha import ReCaptchaV3\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 RuCaptcha, \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = \"\"\n# G-ReCaptcha \u043a\u043b\u044e\u0447 \u0441\u0430\u0439\u0442\u0430\nSITE_KEY = \"\"\n# \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043a\u0430\u043f\u0447\u0451\u0439\nPAGE_URL = \"\"\n# \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 action, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043d\u0430\u0448\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0430\u0439\u0442\u0430\nACTION = 'verify'\n# \u0422\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0430 (score) \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0430, \u043e\u0442 0.1(\u0440\u043e\u0431\u043e\u0442) \u0434\u043e 0.9(\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a)\nMIN_SCORE = 0.4\n# \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f JSON \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438\nuser_answer = ReCaptchaV3.ReCaptchaV3(rucaptcha_key=RUCAPTCHA_KEY, \n\t\t\t\t action = ACTION, \n\t\t\t\t min_score = MIN_SCORE).captcha_handler(site_key=SITE_KEY,\n\t\t\t\t\t \t\t\t\t page_url=PAGE_URL)\n\nif not user_answer['error']:\n\t# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n\tprint(user_answer['captchaSolve'])\n\tprint(user_answer['taskId'])\n\tprint(user_answer['user_check'])\n\tprint(user_answer['user_score'])\nelif user_answer['error']:\n\t# \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n\tprint(user_answer['errorBody']['text'])\n\tprint(user_answer['errorBody']['id'])\n```\n\n5.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 RotateCaptcha(\u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435).](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/RotateCaptcha.py)\n\n6.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043f\u0447\u0438.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/TextCaptcha.py)\n\n```python\nfrom python_rucaptcha import TextCaptcha\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0440\u0443\u043a\u0430\u043f\u0447\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = ''\n# \u0412\u043e\u043f\u0440\u043e\u0441\ntext_question = '\u0415\u0441\u043b\u0438 \u0437\u0430\u0432\u0442\u0440\u0430 \u0441\u0443\u0431\u0431\u043e\u0442\u0430, \u0442\u043e \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u0435\u043d\u044c?'\n\nuser_answer = TextCaptcha.TextCaptcha(rucaptcha_key = RUCAPTCHA_KEY).captcha_handler(captcha_text = text_question)\n\nif not user_answer['error']:\n\t# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n\tprint(user_answer['captchaSolve'])\n\tprint(user_answer['taskId'])\nelif user_answer['error']:\n\t# \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n\tprint(user_answer['errorBody']['text'])\n\tprint(user_answer['errorBody']['id'])\n```\n\n7.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 FunCaptcha.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/FunCaptcha.py)\n\n```python\nfrom python_rucaptcha import FunCaptcha\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0440\u0443\u043a\u0430\u043f\u0447\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = ''\n\n'''\n\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f FunCaptch: \nhttps://www.funcaptcha.com/demo\n\u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u0437\u044f\u0442\u044b\u0435 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u043f\u0447\u0435:\n'''\npublic_key = 'DE0B0BB7-1EE4-4D70-1853-31B835D4506B'\npageurl = 'https://www.funcaptcha.com/demo'\n\nanswer = FunCaptcha.FunCaptcha(rucaptcha_key = RUCAPTCHA_KEY).captcha_handler(public_key=public_key, page_url=pageurl)\n\nif not answer['error']:\n # \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n print(answer['captchaSolve'])\n print(answer['taskId'])\nelif answer['error']:\n # \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n print(answer['errorBody']['text'])\n print(answer['errorBody']['id'])\n\n```\n8.[\u041c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0444\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0436\u0430\u043b\u043e\u0431.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/RuCaptchaControl.py)\n\n9.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 DistilCaptcha.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/DistilCaptcha.py)\n\n```python\nfrom python_rucaptcha.DistilCaptcha import DistilCaptcha\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u043e\u0442 \u0440\u0443\u043a\u0430\u043f\u0447\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\nRUCAPTCHA_KEY = ''\n\nJsSha1 = \"af2d0557c23ff2d8f40ccf4bec57e480704634e9\"\nJsUri = \"http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js\"\nJsData = \"IWZ1bmN0fewfwefwefwef9905j0g4905jh9046hj3cpCg==\"\n\nanswer = DistilCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(\n JsSha1=JsSha1, JsUri=JsUri, JsData=JsData\n)\n\nif not answer['error']:\n # \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n print(answer['captchaSolve'])\n print(answer['taskId'])\nelif answer['error']:\n # \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n print(answer['errorBody']['text'])\n print(answer['errorBody']['id'])\n\n```\n10.[\u0420\u0435\u0448\u0435\u043d\u0438\u0435 HCaptcha.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/HCaptcha.py)\n\n```python\nfrom python_rucaptcha.HCaptcha import HCaptcha\nRUCAPTCHA_KEY = ''\n\nwebsite_link = \"https://secure2.e-konsulat.gov.pl/Uslugi/RejestracjaTerminu.aspx?IDUSLUGI=1&IDPlacowki=94\"\ndata_sitekey = \"39fccce0-e3e3-4f9d-a942-ea415c102beb\"\n\nanswer = HCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(\n site_key=data_sitekey, page_url=website_link\n)\n\nif not answer['error']:\n # \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438\n print(answer['captchaSolve'])\n print(answer['taskId'])\nelif answer['error']:\n # \u0422\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\n print(answer['errorBody']['text'])\n print(answer['errorBody']['id'])\n\n```\n***\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043a\u0430\u043f\u0447\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f [\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442](http://85.255.8.26/), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u0441\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0438\u043f\u044b \u043a\u0430\u043f\u0447\u0438, \u0441 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.\n***\n### Errors table\n| Error ID | \u041e\u0448\u0438\u0431\u043a\u0430\n| ------------- |:-------------:|\n| -1 | \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 (\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0438 \u0442.\u043f.), \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 RuCaptcha \n\n| Error ID | in.php Rucaptcha \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438\n| ------------- |:-------------:|\n| 10 | ERROR_WRONG_USER_KEY \n| 11 | ERROR_KEY_DOES_NOT_EXIST \n| 12 | ERROR_ZERO_BALANCE \n| 13 | ERROR_PAGEURL \n| 14 | ERROR_NO_SLOT_AVAILABLE \n| 15 | ERROR_ZERO_CAPTCHA_FILESIZE \n| 16 | ERROR_TOO_BIG_CAPTCHA_FILESIZE \n| 17 | ERROR_WRONG_FILE_EXTENSION \n| 18 | ERROR_IMAGE_TYPE_NOT_SUPPORTED \n| 19 | ERROR_UPLOAD \n| 20 | ERROR_IP_NOT_ALLOWED \n| 21 | IP_BANNED \n| 22 | ERROR_BAD_TOKEN_OR_PAGEURL\n| 23 | ERROR_GOOGLEKEY \n| 24 | ERROR_CAPTCHAIMAGE_BLOCKED \n| 25 | MAX_USER_TURN \n\n| Error ID | res.php Rucaptcha \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438\n| ------------- |:-------------:| \n| 30 | CAPCHA_NOT_READY \n| 31 | ERROR_CAPTCHA_UNSOLVABLE \n| 32 | ERROR_WRONG_ID_FORMAT \n| 33 | ERROR_WRONG_CAPTCHA_ID \n| 34 | ERROR_BAD_DUPLICATES \n| 35 | REPORT_NOT_RECORDED \n\n| Error ID | NNNN Rucaptcha \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438\n| ------------- |:-------------:|\n| 40 | ERROR: 1001 \n| 41 | ERROR: 1002 \n| 42 | ERROR: 1003 \n| 43 | ERROR: 1004 \n| 44 | ERROR: 1005 \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/AndreiDrang/python-rucaptcha", "keywords": "captcha rucaptcha python3 flask recaptcha captcha security api python-library python-rucaptcha rucaptcha-client", "license": "AGPL-3.0", "maintainer": "", "maintainer_email": "", "name": "python-rucaptcha", "package_url": "https://pypi.org/project/python-rucaptcha/", "platform": "", "project_url": "https://pypi.org/project/python-rucaptcha/", "project_urls": { "Homepage": "https://github.com/AndreiDrang/python-rucaptcha" }, "release_url": "https://pypi.org/project/python-rucaptcha/2.6.4/", "requires_dist": [ "requests (==2.22.0)", "aiohttp (==3.6.0)", "pika (==1.1.0)" ], "requires_python": ">=3.6.0", "summary": "Python 3.6+ RuCaptcha library with AIO module.", "version": "2.6.4" }, "last_serial": 5820319, "releases": { "1.0.0a0": [ { "comment_text": "", "digests": { "md5": "2316d582a27ea2e2e1feff70090dc2ec", "sha256": "df49100a9eadb56a36a7b065fa9f43d62cacda0d16c1097f48fcd4afead53ba8" }, "downloads": -1, "filename": "python-rucaptcha-1.0.0a0.tar.gz", "has_sig": false, "md5_digest": "2316d582a27ea2e2e1feff70090dc2ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 12207, "upload_time": "2017-10-16T14:08:30", "url": "https://files.pythonhosted.org/packages/59/66/4ccbe48cc2eaff995b21aeb4c1f59821cfab55280705d9fe636e52b793fd/python-rucaptcha-1.0.0a0.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "0de2b3f68dbda5626fb19731574319dc", "sha256": "41ea086b6d336d70624913b089e8bad9ed1f6d39a405bffffc08673fc710ec96" }, "downloads": -1, "filename": "python-rucaptcha-1.6.2.tar.gz", "has_sig": false, "md5_digest": "0de2b3f68dbda5626fb19731574319dc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 13933, "upload_time": "2018-02-20T00:42:08", "url": "https://files.pythonhosted.org/packages/49/75/3a4f5c655ffc4356d63f108694a4f03f2cff01480d105587b7590c0aaa0e/python-rucaptcha-1.6.2.tar.gz" } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "ac989a59e55c8aba0cdfb2eb1c069a8e", "sha256": "68fc510ac9940868bfe19b625a09a51da564e01b1ecb770245e392ed49c62b80" }, "downloads": -1, "filename": "python_rucaptcha-1.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "ac989a59e55c8aba0cdfb2eb1c069a8e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 23721, "upload_time": "2018-04-01T14:33:57", "url": "https://files.pythonhosted.org/packages/68/22/5806dd8afc542443b4c1303d56011560105c15951e4c5c4f7485e779a627/python_rucaptcha-1.6.3-py3-none-any.whl" } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "8d33897c2a4df4c31f2611965c3373ca", "sha256": "14fb6f646794c250356ee03bd97954b39c87e75c49b368ce8409a2302781023f" }, "downloads": -1, "filename": "python_rucaptcha-1.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8d33897c2a4df4c31f2611965c3373ca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 23816, "upload_time": "2018-04-03T21:07:36", "url": "https://files.pythonhosted.org/packages/39/3b/5cab1d232812117eaa66f77960982b6b550a3b349e92878600a300bed8ae/python_rucaptcha-1.6.4-py3-none-any.whl" } ], "1.6.5": [ { "comment_text": "", "digests": { "md5": "2a02b1e438912a9f15d04aa61c2f0dcd", "sha256": "a3bc6f1e57ec43f7bff3ba93fa53a0a3d971323f011c1a2f8fb3d3373e85713c" }, "downloads": -1, "filename": "python_rucaptcha-1.6.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2a02b1e438912a9f15d04aa61c2f0dcd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 24400, "upload_time": "2018-04-03T21:59:24", "url": "https://files.pythonhosted.org/packages/d8/ea/e4ce6cdea5c90d573fb13c3da4f107788e1abd62e2efada89074bddd9649/python_rucaptcha-1.6.5-py3-none-any.whl" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "0d4ce52de9086fdcee7457fd63dcdc23", "sha256": "8201eb0494b981bb38e6e3f2a44361da5bd0d12f4d652b1175d58b5f6c296055" }, "downloads": -1, "filename": "python_rucaptcha-2.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0d4ce52de9086fdcee7457fd63dcdc23", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28831, "upload_time": "2018-10-12T15:23:56", "url": "https://files.pythonhosted.org/packages/e6/d6/723a2f332aba4df65590d70fbd327aedf4cae00eefb770ac866f71ce64f2/python_rucaptcha-2.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f4ab166afcd28c252bf384184fd2756", "sha256": "1fa8315cf311881b0629cf429a94186bec72ac98e6d724b7711674213b93e17e" }, "downloads": -1, "filename": "python-rucaptcha-2.2.1.tar.gz", "has_sig": false, "md5_digest": "6f4ab166afcd28c252bf384184fd2756", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19799, "upload_time": "2018-10-12T15:23:57", "url": "https://files.pythonhosted.org/packages/02/72/a2a24ab54db09e954c668beaf1e7e76d77a50c63fe3985b29a0bace60b63/python-rucaptcha-2.2.1.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "5df990064c134de9c75a4affdd4fcbc0", "sha256": "c2532abec153c90cdbb12428f6d2914d316cf97c162463cb28f20ecbca1839de" }, "downloads": -1, "filename": "python_rucaptcha-2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5df990064c134de9c75a4affdd4fcbc0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 29606, "upload_time": "2018-10-21T18:48:02", "url": "https://files.pythonhosted.org/packages/a3/2f/6441d260529b8502734f80ef7adcab83085ad62130aad8df335727c7eb75/python_rucaptcha-2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3ba003c9526049f24ba07e947245292", "sha256": "1f77f9b34023e54d1cadb6dbcb28331ffb4357337152c7a4d7fbdfc894873c24" }, "downloads": -1, "filename": "python-rucaptcha-2.3.tar.gz", "has_sig": false, "md5_digest": "b3ba003c9526049f24ba07e947245292", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16723, "upload_time": "2018-10-21T18:48:04", "url": "https://files.pythonhosted.org/packages/fa/e2/d628fdca34471978fd2c2e7df73bedaba6de0d6800a17ffe000e3486f6c0/python-rucaptcha-2.3.tar.gz" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "22432fed662355c72a00b500a6e32f2a", "sha256": "8bec9f2330634b516ce8b45b308775d6e0b130e9bf5699f911210a7ded2e1384" }, "downloads": -1, "filename": "python_rucaptcha-2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "22432fed662355c72a00b500a6e32f2a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 35268, "upload_time": "2018-11-15T23:22:59", "url": "https://files.pythonhosted.org/packages/14/30/2ea7e18944753342dcff01e7d597e585e47b779246ec9cd6bb0efa5c056d/python_rucaptcha-2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1115abb8dfcb6d5a0882efd68b63e3fc", "sha256": "c7d5402a20050501403c2e84c8a4be86fb97cce0bc59054fe0ca0894290abc15" }, "downloads": -1, "filename": "python-rucaptcha-2.4.tar.gz", "has_sig": false, "md5_digest": "1115abb8dfcb6d5a0882efd68b63e3fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19374, "upload_time": "2018-11-15T23:22:46", "url": "https://files.pythonhosted.org/packages/ca/74/7519619c1db5eb5e280cad781b148392654a8706962a33a5d794c5025ffe/python-rucaptcha-2.4.tar.gz" } ], "2.5": [ { "comment_text": "", "digests": { "md5": "03b0628263a461ee2774bae255a16a23", "sha256": "48a508cd2b45fbb5d9ce62abddbf15e0a314a05c815441608c02c36aa58fdf35" }, "downloads": -1, "filename": "python_rucaptcha-2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "03b0628263a461ee2774bae255a16a23", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 46398, "upload_time": "2018-12-28T14:23:50", "url": "https://files.pythonhosted.org/packages/36/f0/fa1dc2fcecf57504ac2fec8c2da2f227fd2cff8b2b729c051bbe005926d5/python_rucaptcha-2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da42d3b2dce6a0998b521e29a7032c7d", "sha256": "3248e28dc3de5e6465131a4f6fe8bef721f30554cc9fd5ff6ef4270d42d162d9" }, "downloads": -1, "filename": "python-rucaptcha-2.5.tar.gz", "has_sig": false, "md5_digest": "da42d3b2dce6a0998b521e29a7032c7d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21190, "upload_time": "2018-12-28T14:23:51", "url": "https://files.pythonhosted.org/packages/00/83/44f519fa75263c6a015af0ec98814a46c42e5c4ec35262d97b37471db90b/python-rucaptcha-2.5.tar.gz" } ], "2.5.1": [ { "comment_text": "", "digests": { "md5": "f595f996b63ed57a41e05b94916628c0", "sha256": "137e42ca4588fcc9558f7753dcc7f576a9921df0f44228e39951212bde1c057f" }, "downloads": -1, "filename": "python_rucaptcha-2.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f595f996b63ed57a41e05b94916628c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 46430, "upload_time": "2018-12-28T18:41:17", "url": "https://files.pythonhosted.org/packages/26/ff/458ae0b27bd26e06d897aa0c63633125ca7d5f24f30c22903f0f8bf3d874/python_rucaptcha-2.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b098afee5ac83fc4ad94ddca5d7fa2c8", "sha256": "8745ffd0247b5d57d47bae6ad0e03c7efa91996114a829ed7a0fe94321855209" }, "downloads": -1, "filename": "python-rucaptcha-2.5.1.tar.gz", "has_sig": false, "md5_digest": "b098afee5ac83fc4ad94ddca5d7fa2c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21214, "upload_time": "2018-12-28T18:41:19", "url": "https://files.pythonhosted.org/packages/3c/63/d2b8f67b0f6f019dbfb5888c6f2b419b4146f4912ced2b90a38fab524e8f/python-rucaptcha-2.5.1.tar.gz" } ], "2.5.2": [ { "comment_text": "", "digests": { "md5": "07cf2f9cbf276bf8719260d0070a8581", "sha256": "ad9915adbda69064297f85825fe1fc13159b54ed619756c462ca1be2927a78f7" }, "downloads": -1, "filename": "python_rucaptcha-2.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "07cf2f9cbf276bf8719260d0070a8581", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 45807, "upload_time": "2019-02-04T12:40:38", "url": "https://files.pythonhosted.org/packages/4d/4f/db28499c93a9fba56e8607637543a8cf3fb77334a5e8ed7fb8c3163e5d7b/python_rucaptcha-2.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08a7c1cd4eb97867b86c77d747fb1577", "sha256": "576809ec7ae1bd11123b1f8a81d7007d4b443b6dab47095bdcb9b978018a5c3d" }, "downloads": -1, "filename": "python-rucaptcha-2.5.2.tar.gz", "has_sig": false, "md5_digest": "08a7c1cd4eb97867b86c77d747fb1577", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 23692, "upload_time": "2019-02-04T12:40:56", "url": "https://files.pythonhosted.org/packages/14/56/a708c5022427c8ec3ddbfea8ef4123b314e07dbda138467e9928c263f83b/python-rucaptcha-2.5.2.tar.gz" } ], "2.5.3": [ { "comment_text": "", "digests": { "md5": "89221d1ff22d035a854aeb2166660c76", "sha256": "3d0b8dc8153fd3174eaef54e3e22e266f9a12f8eeee4e8170aa468c0c620abca" }, "downloads": -1, "filename": "python_rucaptcha-2.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "89221d1ff22d035a854aeb2166660c76", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 51014, "upload_time": "2019-02-13T22:20:18", "url": "https://files.pythonhosted.org/packages/ef/88/213cdac80f5b8b7939364844c2f4d972ef4a97e83893965d4f1f327163c7/python_rucaptcha-2.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e2507553e810379c96093437b95e5d0", "sha256": "52cbf815fb7548c301936cb73c3018d1c592cf5040d306dd59d8316ad03a5e1e" }, "downloads": -1, "filename": "python-rucaptcha-2.5.3.tar.gz", "has_sig": false, "md5_digest": "1e2507553e810379c96093437b95e5d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 39364, "upload_time": "2019-02-13T22:20:36", "url": "https://files.pythonhosted.org/packages/22/84/6ff5e2032c58b573f330806af51cdd5a0d69aaab131d28e440bdef11f20a/python-rucaptcha-2.5.3.tar.gz" } ], "2.5.4": [ { "comment_text": "", "digests": { "md5": "fc35db08098a4585e37e378eaa616a49", "sha256": "354ed732a4d98c85fd4d4e9fadf82b5da27b1c548c99e6f4130676dcc69168d9" }, "downloads": -1, "filename": "python_rucaptcha-2.5.4-py3-none-any.whl", "has_sig": false, "md5_digest": "fc35db08098a4585e37e378eaa616a49", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 53573, "upload_time": "2019-02-18T10:01:24", "url": "https://files.pythonhosted.org/packages/c0/46/7b0ecfe8b3e9f92ef141533d607a3733a4d31ba44a51a0a0f6c6f922be26/python_rucaptcha-2.5.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ab0860e8918abfba032cd9037b28c77", "sha256": "c77bf05395048a457ee20bb4fb6ebccd797f3c3c3c37f7b3f8d391575b45859d" }, "downloads": -1, "filename": "python-rucaptcha-2.5.4.tar.gz", "has_sig": false, "md5_digest": "1ab0860e8918abfba032cd9037b28c77", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 43075, "upload_time": "2019-02-18T10:01:26", "url": "https://files.pythonhosted.org/packages/76/11/7ee7d63e1e50ed9d7a7337910821223304fa84b1cd6dab769d3387f15a8d/python-rucaptcha-2.5.4.tar.gz" } ], "2.6": [ { "comment_text": "", "digests": { "md5": "cb91c84301a6ceebeb43fe85dc8a5d05", "sha256": "88de19e00affaf1d1a0db1b2f1b2cc889e5406355ec67371800fac2bc2ed3e9a" }, "downloads": -1, "filename": "python_rucaptcha-2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "cb91c84301a6ceebeb43fe85dc8a5d05", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 53014, "upload_time": "2019-02-19T17:25:41", "url": "https://files.pythonhosted.org/packages/2d/57/72d6ac6dc066d15f79438664f11f62880cde6adcf3837fab813e3e226f49/python_rucaptcha-2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55956682d6f51b776cee60ac47fff3e7", "sha256": "008d57bd279a4ca912106eb3a7d4e1500ccd80072880d6f6f00c7b32bb6fb0f3" }, "downloads": -1, "filename": "python-rucaptcha-2.6.tar.gz", "has_sig": false, "md5_digest": "55956682d6f51b776cee60ac47fff3e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 42594, "upload_time": "2019-02-19T17:25:43", "url": "https://files.pythonhosted.org/packages/48/40/ccab975dfd31c8b7839ed9bea57be3f7c76981d9a6bc14ca9392a6631ea4/python-rucaptcha-2.6.tar.gz" } ], "2.6.1": [ { "comment_text": "", "digests": { "md5": "f98b8d9fe153c1229b2a48b83ea0eb27", "sha256": "c125c6bd60040a77d59f64676ba96ae9f975f160b6b3271e0c777beec43385c2" }, "downloads": -1, "filename": "python_rucaptcha-2.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f98b8d9fe153c1229b2a48b83ea0eb27", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 53086, "upload_time": "2019-02-19T17:48:29", "url": "https://files.pythonhosted.org/packages/66/a5/fec10605a27700cc55509a466c31b856052d283134c900f07c7f45691e82/python_rucaptcha-2.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c24f3cfef9d6615dcd19afc591e64fba", "sha256": "3eb13da249ebb44ec8c93847737b0ff90a163607639e0cd671a9336b24dc31be" }, "downloads": -1, "filename": "python-rucaptcha-2.6.1.tar.gz", "has_sig": false, "md5_digest": "c24f3cfef9d6615dcd19afc591e64fba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 42658, "upload_time": "2019-02-19T17:48:31", "url": "https://files.pythonhosted.org/packages/da/f9/4a0fbab16172fbdfd6ed27536549706169cb4039722325b0ce73cc1bb164/python-rucaptcha-2.6.1.tar.gz" } ], "2.6.2": [ { "comment_text": "", "digests": { "md5": "676fd95995df7a4858f0ba01b951c9ec", "sha256": "2a414af75f432d9c61d7718dfd8c5021fa1938e434441115db93a31c297c7434" }, "downloads": -1, "filename": "python_rucaptcha-2.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "676fd95995df7a4858f0ba01b951c9ec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 52780, "upload_time": "2019-06-18T09:23:57", "url": "https://files.pythonhosted.org/packages/31/8f/68c292e2a1c984665752266509083a8f162203d7597c6084d12ce30c3568/python_rucaptcha-2.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce4d0d69d15ee28f3cda01eb048c5143", "sha256": "7ab299dc0b58b0700c12874451cdcd915958a358f0fa47d217858d5a270a1685" }, "downloads": -1, "filename": "python-rucaptcha-2.6.2.tar.gz", "has_sig": false, "md5_digest": "ce4d0d69d15ee28f3cda01eb048c5143", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 40219, "upload_time": "2019-06-18T09:24:01", "url": "https://files.pythonhosted.org/packages/37/d4/946c130a024abb8d529ff7d95221351e94b0d9144194e52f13edd5b32b0f/python-rucaptcha-2.6.2.tar.gz" } ], "2.6.3": [ { "comment_text": "", "digests": { "md5": "328575a755f05fb11492778350fde408", "sha256": "590edb805f35ce15e65d0d06c739d8f35b319a53da65ba79655b960975ee03d4" }, "downloads": -1, "filename": "python_rucaptcha-2.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "328575a755f05fb11492778350fde408", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 55132, "upload_time": "2019-08-21T01:04:13", "url": "https://files.pythonhosted.org/packages/5d/dc/ff31e8b9953b7a86772a0d8c6a6b18a462effea3ecf7eb9390e4013421c8/python_rucaptcha-2.6.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13ffab0b747ab7679e8ccdfa2850feaf", "sha256": "0d4273ad428deb94cf34878f111e15a195859607774171217a4be82109832c81" }, "downloads": -1, "filename": "python-rucaptcha-2.6.3.tar.gz", "has_sig": false, "md5_digest": "13ffab0b747ab7679e8ccdfa2850feaf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 40865, "upload_time": "2019-08-21T01:04:15", "url": "https://files.pythonhosted.org/packages/6d/45/577f3deca4eb699e962e61c3344e2bb9629c211358bf7ddb94631cd1f9c6/python-rucaptcha-2.6.3.tar.gz" } ], "2.6.4": [ { "comment_text": "", "digests": { "md5": "ddc38c8fd3448b2e21c5cf1f124e0151", "sha256": "7d62ff1c9e4ffec1a346de9d94fd63cffd9b912df96600d923ae3903053bfeca" }, "downloads": -1, "filename": "python_rucaptcha-2.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ddc38c8fd3448b2e21c5cf1f124e0151", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 58020, "upload_time": "2019-09-12T13:07:27", "url": "https://files.pythonhosted.org/packages/0b/69/c4274ee29cd095b138d872916c9dd310645f7a26b42b57a4f3bb9f4a2812/python_rucaptcha-2.6.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79729db9dbc8cbc62ff1573434a6792b", "sha256": "ebf16340757008ce21f3b345c80c0dd52752a01ed621baba7d07eee157baf533" }, "downloads": -1, "filename": "python-rucaptcha-2.6.4.tar.gz", "has_sig": false, "md5_digest": "79729db9dbc8cbc62ff1573434a6792b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 42548, "upload_time": "2019-09-12T13:07:29", "url": "https://files.pythonhosted.org/packages/93/02/96e3c9cb1705c2335d35eaec1ab0c0f179f6432998ecc7cefda72280937c/python-rucaptcha-2.6.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ddc38c8fd3448b2e21c5cf1f124e0151", "sha256": "7d62ff1c9e4ffec1a346de9d94fd63cffd9b912df96600d923ae3903053bfeca" }, "downloads": -1, "filename": "python_rucaptcha-2.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ddc38c8fd3448b2e21c5cf1f124e0151", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 58020, "upload_time": "2019-09-12T13:07:27", "url": "https://files.pythonhosted.org/packages/0b/69/c4274ee29cd095b138d872916c9dd310645f7a26b42b57a4f3bb9f4a2812/python_rucaptcha-2.6.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79729db9dbc8cbc62ff1573434a6792b", "sha256": "ebf16340757008ce21f3b345c80c0dd52752a01ed621baba7d07eee157baf533" }, "downloads": -1, "filename": "python-rucaptcha-2.6.4.tar.gz", "has_sig": false, "md5_digest": "79729db9dbc8cbc62ff1573434a6792b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 42548, "upload_time": "2019-09-12T13:07:29", "url": "https://files.pythonhosted.org/packages/93/02/96e3c9cb1705c2335d35eaec1ab0c0f179f6432998ecc7cefda72280937c/python-rucaptcha-2.6.4.tar.gz" } ] }