proxy-scraper-cli 1.25.0__tar.gz → 1.27.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/PKG-INFO +52 -46
  2. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/README.md +49 -45
  3. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/PKG-INFO +52 -46
  4. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/SOURCES.txt +9 -1
  5. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/requires.txt +2 -0
  6. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/__init__.py +1 -1
  7. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/app.py +11 -4
  8. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/mirror.py +2 -0
  9. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/parsing.py +29 -4
  10. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/pyproject.toml +1 -1
  11. proxy_scraper_cli-1.27.0/tests/test_citation.py +23 -0
  12. proxy_scraper_cli-1.27.0/tests/test_colon_logins.py +86 -0
  13. proxy_scraper_cli-1.27.0/tests/test_hf_card.py +18 -0
  14. proxy_scraper_cli-1.27.0/tests/test_hf_parquet.py +98 -0
  15. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_mirror.py +8 -0
  16. proxy_scraper_cli-1.27.0/tests/test_pypi_readme.py +129 -0
  17. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_serve_api.py +24 -1
  18. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_serve_dashboard.py +2 -1
  19. proxy_scraper_cli-1.27.0/tests/test_workflow_permissions.py +42 -0
  20. proxy_scraper_cli-1.27.0/tests/test_workflow_pins.py +34 -0
  21. proxy_scraper_cli-1.27.0/tests/test_workflow_pip.py +85 -0
  22. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/LICENSE +0 -0
  23. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
  24. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
  25. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
  26. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/__main__.py +0 -0
  27. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/action.py +0 -0
  28. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/agent.py +0 -0
  29. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/api.py +0 -0
  30. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/asndb.py +0 -0
  31. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/blocklist.py +0 -0
  32. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/charts.py +0 -0
  33. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/checker.py +0 -0
  34. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/cli.py +0 -0
  35. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/compat.py +0 -0
  36. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/completion.py +0 -0
  37. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/exporters.py +0 -0
  38. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/fetchcache.py +0 -0
  39. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/geo.py +0 -0
  40. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/geodb.py +0 -0
  41. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/handshake.py +0 -0
  42. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/history.py +0 -0
  43. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/judges.py +0 -0
  44. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/mcp_entry.py +0 -0
  45. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/mcp_server.py +0 -0
  46. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/netio.py +0 -0
  47. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/options.py +0 -0
  48. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/output.py +0 -0
  49. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/pages.py +0 -0
  50. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/paths.py +0 -0
  51. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/pipeline.py +0 -0
  52. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/preferences.py +0 -0
  53. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/proxypages.py +0 -0
  54. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/publish.py +0 -0
  55. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ranking.py +0 -0
  56. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/report.py +0 -0
  57. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/runsteps.py +0 -0
  58. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/__init__.py +0 -0
  59. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/api.py +0 -0
  60. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/core.py +0 -0
  61. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/dashboard.html +0 -0
  62. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/http.py +0 -0
  63. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/pool.py +0 -0
  64. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/socks.py +0 -0
  65. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/status.py +0 -0
  66. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/server/upstream.py +0 -0
  67. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/site/apple-touch-icon.png +0 -0
  68. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
  69. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/site/index.html +0 -0
  70. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/site/logo.png +0 -0
  71. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/site/og.png +0 -0
  72. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/sites.py +0 -0
  73. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/sources.json +0 -0
  74. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/sources.py +0 -0
  75. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/speed.py +0 -0
  76. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/targets.py +0 -0
  77. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/__init__.py +0 -0
  78. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/dashboard.py +0 -0
  79. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/keys.py +0 -0
  80. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/report.py +0 -0
  81. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/serve.py +0 -0
  82. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/widgets.py +0 -0
  83. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/proxyscraper/ui/wizard.py +0 -0
  84. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/setup.cfg +0 -0
  85. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_action.py +0 -0
  86. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_agent.py +0 -0
  87. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_api.py +0 -0
  88. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_app.py +0 -0
  89. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_asndb.py +0 -0
  90. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_auth.py +0 -0
  91. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_blocklist.py +0 -0
  92. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_charts.py +0 -0
  93. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_checker.py +0 -0
  94. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_compat.py +0 -0
  95. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_completion.py +0 -0
  96. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_discovery_growth.py +0 -0
  97. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_exporters.py +0 -0
  98. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_fetchcache.py +0 -0
  99. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_geodb.py +0 -0
  100. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_judges.py +0 -0
  101. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_learning.py +0 -0
  102. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_live_api.py +0 -0
  103. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_mcp_server.py +0 -0
  104. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_mine_sources.py +0 -0
  105. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_options.py +0 -0
  106. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_output_stdout.py +0 -0
  107. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_own_sources.py +0 -0
  108. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_pac.py +0 -0
  109. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_packaging.py +0 -0
  110. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_pages.py +0 -0
  111. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_parsing.py +0 -0
  112. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_parsing_fuzz.py +0 -0
  113. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_paths.py +0 -0
  114. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_pick.py +0 -0
  115. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_pipeline.py +0 -0
  116. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_preferences.py +0 -0
  117. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_proxy_pages.py +0 -0
  118. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_proxy_sources.py +0 -0
  119. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_publish.py +0 -0
  120. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_recheck_stdin.py +0 -0
  121. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_report.py +0 -0
  122. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_robustness.py +0 -0
  123. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_rotator.py +0 -0
  124. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_serve_password.py +0 -0
  125. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_serve_refill.py +0 -0
  126. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_serve_v2.py +0 -0
  127. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_server.py +0 -0
  128. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_server_closed_writer.py +0 -0
  129. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_server_fixes.py +0 -0
  130. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_sites.py +0 -0
  131. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_sources_json.py +0 -0
  132. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_speed.py +0 -0
  133. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_speed_ranking.py +0 -0
  134. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_survival_ranking.py +0 -0
  135. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_tamper.py +0 -0
  136. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_targets.py +0 -0
  137. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_ui.py +0 -0
  138. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_uptime.py +0 -0
  139. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.27.0}/tests/test_wizard.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proxy-scraper-cli
3
- Version: 1.25.0
3
+ Version: 1.27.0
4
4
  Summary: Finds free HTTP, SOCKS4 and SOCKS5 proxies that actually work: 700+ sources, real checks, honeypot filtering and a rotating local proxy server.
5
5
  Author: Maximilian Feix
6
6
  License-Expression: MIT
@@ -37,15 +37,17 @@ Requires-Dist: mcp<3,>=2.2; python_version >= "3.10" and extra == "mcp"
37
37
  Provides-Extra: dev
38
38
  Requires-Dist: pytest; extra == "dev"
39
39
  Requires-Dist: hypothesis; extra == "dev"
40
+ Requires-Dist: pyyaml; extra == "dev"
41
+ Requires-Dist: markdown-it-py; extra == "dev"
40
42
  Requires-Dist: ruff==0.16.9; extra == "dev"
41
43
  Dynamic: license-file
42
44
 
43
45
  <div align="center">
44
46
 
45
47
  <picture>
46
- <source media="(prefers-color-scheme: dark)" srcset="docs/banner-dark.svg">
47
- <source media="(prefers-color-scheme: light)" srcset="docs/banner-light.svg">
48
- <img src="docs/banner-dark.svg" alt="proxy-scraper – free proxies that actually work" width="100%">
48
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/banner-dark.svg">
49
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/banner-light.svg">
50
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/banner-dark.svg" alt="proxy-scraper – free proxies that actually work" width="100%">
49
51
  </picture>
50
52
 
51
53
  [![tests](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml/badge.svg)](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml)
@@ -53,18 +55,18 @@ Dynamic: license-file
53
55
  [![Live proxies](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Ftotal.json&style=flat-square&labelColor=121113)](#live-list)
54
56
  [![PyPI](https://img.shields.io/pypi/v/proxy-scraper-cli?style=flat-square&color=D4F77A&labelColor=121113&label=pypi)](https://pypi.org/project/proxy-scraper-cli/)
55
57
  [![Downloads](https://img.shields.io/pepy/dt/proxy-scraper-cli?style=flat-square&color=D4F77A&labelColor=121113&label=downloads)](https://pepy.tech/projects/proxy-scraper-cli)
56
- [![Python](https://img.shields.io/badge/python-3.9–3.14-D4F77A?style=flat-square&labelColor=121113)](pyproject.toml)
58
+ [![Python](https://img.shields.io/badge/python-3.9–3.14-D4F77A?style=flat-square&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/pyproject.toml)
57
59
  [![Stars](https://img.shields.io/github/stars/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/stargazers)
58
- [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](LICENSE)
60
+ [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/LICENSE)
59
61
 
60
62
  <a href="https://maximilianfeix.github.io/proxy-scraper/"><img src="https://img.shields.io/badge/Browse_the_live_list-D4F77A?style=for-the-badge&labelColor=121113" alt="Browse the live list"></a>
61
63
  <a href="https://github.com/maximilianfeix/free-proxy-list"><img src="https://img.shields.io/badge/Just_the_lists-121113?style=for-the-badge" alt="Just the lists: free-proxy-list"></a>
62
64
  <a href="#install"><img src="https://img.shields.io/badge/Install-121113?style=for-the-badge" alt="Install"></a>
63
65
  <a href="#from-python"><img src="https://img.shields.io/badge/Python_API-121113?style=for-the-badge" alt="Python API"></a>
64
66
  <a href="#mcp"><img src="https://img.shields.io/badge/MCP_server-121113?style=for-the-badge" alt="MCP server for AI agents"></a>
65
- <a href="bot/"><img src="https://img.shields.io/badge/Discord_bot-121113?style=for-the-badge" alt="Discord bot"></a>
67
+ <a href="https://github.com/maximilianfeix/proxy-scraper/tree/v1.27.0/bot/"><img src="https://img.shields.io/badge/Discord_bot-121113?style=for-the-badge" alt="Discord bot"></a>
66
68
 
67
- **English** · [简体中文](README.zh-CN.md)
69
+ **English** · [简体中文](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/README.zh-CN.md)
68
70
 
69
71
  [Install](#install) · [Live list](#live-list) · [For AI agents](#mcp) · [Proxy server](#proxy-server) · [How it works](#how-it-works) · [Recipes](#recipes) · [Options](#options) · [FAQ](#faq)
70
72
 
@@ -74,7 +76,9 @@ Dynamic: license-file
74
76
 
75
77
  Most free proxy lists are 95 % dead, and a good part of the rest are honeypots or proxies that inject scripts into your pages. **proxy-scraper** collects public HTTP, SOCKS4 and SOCKS5 proxies from 700+ sources and keeps only the ones that pass every check. It learns with every run which sources are worth it, and it can turn the result into a single rotating proxy.
76
78
 
77
- **In numbers:** in one day it checked 3.6 million free proxies – 1.1 % worked, and more than half of the ones that answered failed a second request. [What's actually out there →](docs/free-proxies-in-numbers.md)
79
+ **In numbers:** in one day it checked 3.6 million free proxies – 1.1 % worked, and more than half of the ones that answered failed a second request. [What's actually out there →](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/docs/free-proxies-in-numbers.md)
80
+
81
+ **Used by:** the hourly list is a built-in source of [monosans/proxy-scraper-checker](https://github.com/monosans/proxy-scraper-checker) and [gfpcom/free-proxy-list](https://github.com/gfpcom/free-proxy-list).
78
82
 
79
83
  **Try it – no install, about five seconds:**
80
84
 
@@ -88,7 +92,7 @@ curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
88
92
  `uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
89
93
 
90
94
  <div align="center">
91
- <img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
95
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
92
96
  </div>
93
97
 
94
98
  > **Who runs free proxies – and is it safe to use them?** Mostly nobody on purpose: misconfigured servers with an open port, a few deliberately open ones, infected machines, and traps that log or rewrite your traffic. That's why every proxy here has to pass [five checks](#how-it-works), and why they're for public data and testing – never for logins, payments or anything personal. [More on where they come from →](#who-runs-free-proxies)
@@ -177,7 +181,7 @@ Installed, the learned state lives in your user data folder (`~/Library/Applicat
177
181
  Started without arguments, a wizard asks what you are looking for:
178
182
 
179
183
  <div align="center">
180
- <img src="docs/wizard.svg" alt="Setup wizard" width="760">
184
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/wizard.svg" alt="Setup wizard" width="760">
181
185
  </div>
182
186
 
183
187
  | Preset | What it does |
@@ -198,9 +202,9 @@ Keys: <kbd>↑</kbd><kbd>↓</kbd> select · <kbd>Space</kbd> toggle · <kbd>1</
198
202
 
199
203
  ## Live proxy list
200
204
 
201
- Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](../../tree/proxy-list) branch – every entry worked in the last run, best first: fast ones that are likely to still be up come on top.
205
+ Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](https://github.com/maximilianfeix/proxy-scraper/tree/proxy-list) branch – every entry worked in the last run, best first: fast ones that are likely to still be up come on top.
202
206
 
203
- > **Just want the lists?** They also live in a repository of their own, **[maximilianfeix/free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)** – one list per protocol, per country and per site, updated every hour, with the numbers of the last run on the front page. Watch or star it to keep it at hand.
207
+ > **Just want the lists?** They also live in a repository of their own, **[maximilianfeix/free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)** – one list per protocol, per country and per site, updated every hour, with the numbers of the last run on the front page. Watch or star it to keep it at hand. Other tools pull it too: [monosans/proxy-scraper-checker](https://github.com/monosans/proxy-scraper-checker) and [gfpcom/free-proxy-list](https://github.com/gfpcom/free-proxy-list) use it as a built-in source.
204
208
 
205
209
  <a href="https://maximilianfeix.github.io/proxy-scraper/"><picture>
206
210
  <source media="(prefers-color-scheme: dark)" srcset="https://maximilianfeix.github.io/proxy-scraper/chart-dark.svg">
@@ -212,15 +216,15 @@ Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and pub
212
216
 
213
217
  Every protocol and country also has its own page with a plain download, e.g. [SOCKS5](https://maximilianfeix.github.io/proxy-scraper/socks5/) or [Germany](https://maximilianfeix.github.io/proxy-scraper/country/de/) (`country/de/proxies.txt`).
214
218
 
215
- <div align="center"><a href="https://maximilianfeix.github.io/proxy-scraper/"><img src="docs/website.png" alt="The live list website" width="860"></a></div>
219
+ <div align="center"><a href="https://maximilianfeix.github.io/proxy-scraper/"><img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/website.png" alt="The live list website" width="860"></a></div>
216
220
 
217
221
  <div align="center">
218
222
 
219
- [![Proxies](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Ftotal.json&style=for-the-badge)](../../tree/proxy-list)
223
+ [![Proxies](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Ftotal.json&style=for-the-badge)](https://github.com/maximilianfeix/proxy-scraper/tree/proxy-list)
220
224
  [![HTTP](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Fhttp.json&style=for-the-badge)](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt)
221
225
  [![SOCKS4](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Fsocks4.json&style=for-the-badge)](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt)
222
226
  [![SOCKS5](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Fsocks5.json&style=for-the-badge)](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt)
223
- [![Updated](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Fupdated.json&style=for-the-badge)](../../actions/workflows/proxy-list.yml)
227
+ [![Updated](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmaximilianfeix%2Fproxy-scraper%2Fproxy-list%2Fbadges%2Fupdated.json&style=for-the-badge)](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/proxy-list.yml)
224
228
 
225
229
  </div>
226
230
 
@@ -244,7 +248,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
244
248
  curl -s https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt | head
245
249
  ```
246
250
 
247
- **Over time:** every day the first run's `proxies.json` is kept for good as a gzipped asset of the release of that year, like [snapshots-2026](../../releases/tag/snapshots-2026) – `proxies-2026-09-28.json.gz` and so on, for anyone who wants to look at free proxies over weeks and months.
251
+ **Over time:** every day the first run's `proxies.json` is kept for good as a gzipped asset of the release of that year, like [snapshots-2026](https://github.com/maximilianfeix/proxy-scraper/releases/tag/snapshots-2026) – `proxies-2026-09-28.json.gz` and so on, for anyone who wants to look at free proxies over weeks and months.
248
252
 
249
253
  Every file is also on GitHub Pages, which sits behind a CDN, isn't rate limited like raw.githubusercontent and sends CORS headers, so it works straight from the browser: `https://maximilianfeix.github.io/proxy-scraper/socks5.txt`. [jsDelivr](https://cdn.jsdelivr.net/gh/maximilianfeix/proxy-scraper@proxy-list/) works too, but can lag behind by a few hours.
250
254
 
@@ -258,6 +262,8 @@ Or let the tool start from it: `proxy-scraper --recheck live` downloads the list
258
262
 
259
263
  `proxy-scraper-mcp` is an [MCP](https://modelcontextprotocol.io) server: Claude Code, Claude Desktop, Cursor, VS Code, Codex and any other MCP client can ask for working proxies and load pages through them.
260
264
 
265
+ [![proxy-scraper MCP server on Glama](https://glama.ai/mcp/servers/maximilianfeix/proxy-scraper/badges/score.svg)](https://glama.ai/mcp/servers/maximilianfeix/proxy-scraper)
266
+
261
267
  | Tool | What it does |
262
268
  |---|---|
263
269
  | `get_proxies` | working proxies right now, from the hourly list – filter by protocol, country, HTTPS, elite, no datacenter, not blocklisted, stable, uptime, latency, gets through to Google/Reddit/Amazon |
@@ -354,7 +360,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
354
360
  <td valign="top">
355
361
 
356
362
  **Real verification**<br>
357
- Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests: over 3.6 million checks, 54 % of the proxies that answered the first request failed the second. A third request catches proxies that **tamper with content**: about one in 40 working proxies changed a known page, usually by injecting a script ([the numbers](docs/free-proxies-in-numbers.md)). Plus: HTTPS through a tunnel with **verified TLS**, anonymity level *elite / anonymous / transparent* and the country of the exit IP.
363
+ Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests: over 3.6 million checks, 54 % of the proxies that answered the first request failed the second. A third request catches proxies that **tamper with content**: about one in 40 working proxies changed a known page, usually by injecting a script ([the numbers](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/docs/free-proxies-in-numbers.md)). Plus: HTTPS through a tunnel with **verified TLS**, anonymity level *elite / anonymous / transparent* and the country of the exit IP.
358
364
 
359
365
  </td>
360
366
  <td valign="top">
@@ -539,7 +545,7 @@ proxy-scraper --recheck --serve --serve-host 0.0.0.0
539
545
  curl -x "http://country-de:$PROXY_SCRAPER_SERVE_PASSWORD@your-server:8899" https://api.ipify.org
540
546
  ```
541
547
 
542
- Without a password, `--serve-host` means **anyone who reaches the port can use it**. The ready-made [`compose.yaml`](compose.yaml) starts the server in Docker from the live list, with a password, a health check and learned state in a volume: put `PROXY_PASSWORD=…` into `.env`, then `docker compose up -d`.
548
+ Without a password, `--serve-host` means **anyone who reaches the port can use it**. The ready-made [`compose.yaml`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/compose.yaml) starts the server in Docker from the live list, with a password, a health check and learned state in a volume: put `PROXY_PASSWORD=…` into `.env`, then `docker compose up -d`.
543
549
 
544
550
  | Option | What it does |
545
551
  |---|---|
@@ -560,7 +566,7 @@ In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In th
560
566
 
561
567
  **Live dashboard:** open `http://127.0.0.1:8899/__proxy-scraper/` in a browser – the pool, success rate, traffic, a live chart of requests, countries, the best proxies and the latest connections, refreshed every two seconds. It needs nothing from the internet, and `--serve-password` protects it like the rest.
562
568
 
563
- <div align="center"><img src="docs/dashboard-live.png" alt="The live dashboard of the rotating proxy server: usable proxies, success rate, requests per second, countries and the latest connections" width="860"></div>
569
+ <div align="center"><img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/dashboard-live.png" alt="The live dashboard of the rotating proxy server: usable proxies, success rate, requests per second, countries and the latest connections" width="860"></div>
564
570
 
565
571
  <a id="pool-api"></a>
566
572
 
@@ -598,16 +604,16 @@ requests.get("https://example.com", proxies={"http": proxy, "https": proxy})
598
604
 
599
605
  ## Discord and Telegram bot
600
606
 
601
- The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts every run into a server – a summary with the fastest proxies, the full lists per protocol as files, and slash commands like `/proxies type:socks5 country:DE https:true`. It sets up its own read-only channels when you invite it, and a GitHub Action deploys it to a server as a systemd service. The same process answers on Telegram too: `/proxy de socks5` for one proxy with a curl line, `/proxies 10 us https` for a short list. Setup in [bot/README.md](bot/README.md).
607
+ The live list can also come to you: [`bot/`](https://github.com/maximilianfeix/proxy-scraper/tree/v1.27.0/bot/) is a Discord bot that posts every run into a server – a summary with the fastest proxies, the full lists per protocol as files, and slash commands like `/proxies type:socks5 country:DE https:true`. It sets up its own read-only channels when you invite it, and a GitHub Action deploys it to a server as a systemd service. The same process answers on Telegram too: `/proxy de socks5` for one proxy with a curl line, `/proxies 10 us https` for a short list. Setup in [bot/README.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/bot/README.md).
602
608
 
603
609
  <a id="how-it-works"></a>
604
610
 
605
611
  ## How it works
606
612
 
607
613
  <picture>
608
- <source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
609
- <source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
610
- <img src="docs/checks-dark.svg" alt="The five checks: 700+ lists, a real handshake, two sites with one IP, nothing injected, the details" width="100%">
614
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/checks-dark.svg">
615
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/checks-light.svg">
616
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/checks-dark.svg" alt="The five checks: 700+ lists, a real handshake, two sites with one IP, nothing injected, the details" width="100%">
611
617
  </picture>
612
618
 
613
619
 
@@ -622,7 +628,7 @@ flowchart LR
622
628
  G -. next run .-> C
623
629
  ```
624
630
 
625
- 1. **Sources** – the curated list in [`sources.json`](proxyscraper/sources.json), meta sources (other projects that maintain lists of proxy sources) and, once a day, a GitHub search for actively maintained repos. Every search adds to what earlier ones found; a list the search hasn't seen for three weeks drops out.
631
+ 1. **Sources** – the curated list in [`sources.json`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/proxyscraper/sources.json), meta sources (other projects that maintain lists of proxy sources) and, once a day, a GitHub search for actively maintained repos. Every search adds to what earlier ones found; a list the search hasn't seen for three weeks drops out.
626
632
  2. **Collect** – plain text, HTML tables, JSON APIs and `type://ip:port` lines are recognized; private and reserved address ranges are dropped. Lists that haven't changed since the last run answer `304` and come from a local cache – a second run right after the first loads 0 MB instead of ~160 MB.
627
633
  3. **Prioritize** – known working proxies first, then by the learned hit rate of their sources.
628
634
  4. **Check** – every proxy has to fetch its exit IP from a check target (`checkip.amazonaws.com`, with `ifconfig.me`, `ipinfo.io`, `wtfismyip.com` and `ident.me` as reserves – none of them behind Cloudflare) and return a valid, *foreign* IP. If the target goes down mid-run, the tool switches and re-checks the proxies that were affected, so the statistics don't learn from an outage. Anyone passing your own IP through is out. Then comes the **confirmation** via `httpbin.org`: fake proxies that only answer the first check with “200 + IP” fail here. Finally a static HTML page has to arrive byte for byte as it does without a proxy – anyone injecting ads or scripts is out.
@@ -634,9 +640,9 @@ flowchart LR
634
640
  <summary><b>📸 See the live dashboard and final report</b></summary>
635
641
  <br>
636
642
  <div align="center">
637
- <img src="docs/dashboard.svg" alt="Live dashboard while checking" width="860">
643
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/dashboard.svg" alt="Live dashboard while checking" width="860">
638
644
  <br><br>
639
- <img src="docs/summary.svg" alt="Final report after a run" width="860">
645
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.27.0/docs/summary.svg" alt="Final report after a run" width="860">
640
646
  </div>
641
647
  </details>
642
648
 
@@ -647,7 +653,7 @@ proxy-scraper --source https://example.com/my-list.txt --source socks5=./socks.t
647
653
  proxy-scraper --only-sources --source bought.txt --want 50 # only yours
648
654
  ```
649
655
 
650
- Any text with `ip:port` works; lines like `socks5://user:pass@host:port` keep their type, bare ones are tried as HTTP and SOCKS5 unless you write `http=…`.
656
+ Any text with `ip:port` works; lines like `socks5://user:pass@host:port` keep their type, bare ones are tried as HTTP and SOCKS5 unless you write `http=…`. For logins written the way many paid lists export them, `ip:port:user:pass`, use `--recheck bought.txt` or pipe the list into `--recheck -` – sources leave that form alone, since lists like `ip:port:US:elite` look the same.
651
657
 
652
658
  <a id="output"></a>
653
659
 
@@ -805,7 +811,7 @@ Username wishes – `country-us` sends everything out through US proxies, `sessi
805
811
  proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
806
812
  ```
807
813
 
808
- **Check a list you already have** – `--recheck -` reads it from stdin: plain `ip:port` lines, `type://ip:port`, logins, JSON, a CSV export or a table pasted from a website (HTML or Markdown), in the order it came in. Only what works from your network comes out:
814
+ **Check a list you already have** – `--recheck -` reads it from stdin: plain `ip:port` lines, `type://ip:port`, logins (`user:pass@ip:port` or `ip:port:user:pass`), JSON, a CSV export or a table pasted from a website (HTML or Markdown), in the order it came in. Only what works from your network comes out:
809
815
 
810
816
  ```bash
811
817
  curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
@@ -919,13 +925,13 @@ The repo does part of the work itself:
919
925
 
920
926
  | Workflow | What it does |
921
927
  |---|---|
922
- | [**tests**](../../actions/workflows/tests.yml) | 3 operating systems × 3 Python versions, plus a built and installed package – on every push and pull request |
923
- | [**lint**](../../actions/workflows/lint.yml) | `ruff` with a pinned version – same rules locally and in CI |
924
- | [**codeql**](../../actions/workflows/codeql.yml) | security analysis on every push and once a week |
925
- | [**proxy list**](../../actions/workflows/proxy-list.yml) | every hour: collect, check, publish to `proxy-list`. The learned statistics live in the Actions cache, so the tool keeps getting better in the cloud too |
926
- | [**docker**](../../actions/workflows/docker.yml) | builds the image on every change and runs a real scan inside it; on a version tag it publishes `linux/amd64` + `linux/arm64` to `ghcr.io` |
927
- | [**release**](../../actions/workflows/release.yml) | on a version tag: test, build, smoke-test and publish a GitHub release with the wheel |
928
- | [**discord bot**](../../actions/workflows/bot.yml) | tests the bot and deploys it to the server on every change in `bot/` |
928
+ | [**tests**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml) | 3 operating systems × 3 Python versions, plus a built and installed package – on every push and pull request |
929
+ | [**lint**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/lint.yml) | `ruff` with a pinned version – same rules locally and in CI |
930
+ | [**codeql**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/codeql.yml) | security analysis on every push and once a week |
931
+ | [**proxy list**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/proxy-list.yml) | every hour: collect, check, publish to `proxy-list`. The learned statistics live in the Actions cache, so the tool keeps getting better in the cloud too |
932
+ | [**docker**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/docker.yml) | builds the image on every change and runs a real scan inside it; on a version tag it publishes `linux/amd64` + `linux/arm64` to `ghcr.io` |
933
+ | [**release**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/release.yml) | on a version tag: test, build, smoke-test and publish a GitHub release with the wheel |
934
+ | [**discord bot**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/bot.yml) | tests the bot and deploys it to the server on every change in `bot/` |
929
935
  | **Dependabot** | keeps the action versions up to date |
930
936
 
931
937
  <a id="faq"></a>
@@ -1003,9 +1009,9 @@ Only for things that don't matter. Public proxies are run by strangers who can r
1003
1009
 
1004
1010
  ## Roadmap
1005
1011
 
1006
- What's next is in the [open issues](../../issues) – ideas and wishes are welcome as an [issue](../../issues/new/choose). During Hacktoberfest there are [beginner-friendly issues](../../issues?q=is%3Aopen+label%3Ahacktoberfest) with pointers on where to start.
1012
+ What's next is in the [open issues](https://github.com/maximilianfeix/proxy-scraper/issues) – ideas and wishes are welcome as an [issue](https://github.com/maximilianfeix/proxy-scraper/issues/new/choose). During Hacktoberfest there are [beginner-friendly issues](https://github.com/maximilianfeix/proxy-scraper/issues?q=is%3Aopen+label%3Ahacktoberfest) with pointers on where to start.
1007
1013
 
1008
- Shipped in v1.24 and v1.25: `--recheck -` for lists you pipe in, which proxies get through to Discord, a README you can try in five seconds, and the MCP server in the Docker image.
1014
+ Shipped in v1.24 to v1.26: `--recheck -` for lists you pipe in, which proxies get through to Discord, a README you can try in five seconds, the MCP server in the Docker image, logins written as `ip:port:user:pass`, and a Hugging Face dataset that loads in one line.
1009
1015
 
1010
1016
  Shipped in v1.22 and v1.23: a live dashboard for the rotating server, `--export pac` and an hourly `proxy.pac`, "best first" that counts how likely a proxy is still up, the lists in a repository of their own ([free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)), daily snapshots on Hugging Face, `brew install`, a Chinese README, Python 3.14, and a recipe for Burp Suite, ZAP and mitmproxy.
1011
1017
 
@@ -1013,17 +1019,17 @@ Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere,
1013
1019
 
1014
1020
  Shipped in v1.8 and v1.9: uptime per proxy and `stable.txt`, which proxies get through to Google, Reddit and Amazon, `live_proxies()` in Python, a page per proxy with its week of checks, a weekly report, live charts in this README, shareable filters on the website, sources mined from other scrapers' lists, untyped lists tried as HTTP and SOCKS5, `--export singbox`, PowerShell completion and recipes for httpx, aiohttp and Scrapy.
1015
1021
 
1016
- Shipped in [v1.7](../../milestone/7): an MCP server so AI agents get working proxies and can load pages through them, 28 new sources and a GitHub search that runs daily and keeps what it found, and a cleaner website.
1022
+ Shipped in [v1.7](https://github.com/maximilianfeix/proxy-scraper/milestone/7): an MCP server so AI agents get working proxies and can load pages through them, 28 new sources and a GitHub search that runs daily and keeps what it found, and a cleaner website.
1017
1023
 
1018
- Shipped in [v1.6](../../milestone/6): spam blocklist check for every exit IP, a live list refreshed every hour, pages per protocol and country, an optional password for the proxy server and a pool that refills itself while it runs, `compose.yaml`, `-o -` for pipes, a Discord bot, and a new website and README – everything in English now.
1024
+ Shipped in [v1.6](https://github.com/maximilianfeix/proxy-scraper/milestone/6): spam blocklist check for every exit IP, a live list refreshed every hour, pages per protocol and country, an optional password for the proxy server and a pool that refills itself while it runs, `compose.yaml`, `-o -` for pipes, a Discord bot, and a new website and README – everything in English now.
1019
1025
 
1020
- Shipped in [v1.5](../../milestone/5): content tampering check, live list website with trend and stable proxies, provider/datacenter info, a much bigger proxy server (rotation strategies, sticky sessions, SOCKS5 inbound, status and Prometheus metrics), `--recheck live`, Python API, shell completion. Measured and dropped earlier: protocol detection with an extra connection ([#3](../../issues/3)) and IPv6 ([#1](../../issues/1)).
1026
+ Shipped in [v1.5](https://github.com/maximilianfeix/proxy-scraper/milestone/5): content tampering check, live list website with trend and stable proxies, provider/datacenter info, a much bigger proxy server (rotation strategies, sticky sessions, SOCKS5 inbound, status and Prometheus metrics), `--recheck live`, Python API, shell completion. Measured and dropped earlier: protocol detection with an extra connection ([#3](https://github.com/maximilianfeix/proxy-scraper/issues/3)) and IPv6 ([#1](https://github.com/maximilianfeix/proxy-scraper/issues/1)).
1021
1027
 
1022
1028
  <a id="contributing"></a>
1023
1029
 
1024
1030
  ## Contributing
1025
1031
 
1026
- Bug reports, new sources and pull requests are very welcome – see [CONTRIBUTING.md](CONTRIBUTING.md), and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for how the pieces fit together. The short version:
1032
+ Bug reports, new sources and pull requests are very welcome – see [CONTRIBUTING.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/CONTRIBUTING.md), and [docs/ARCHITECTURE.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/docs/ARCHITECTURE.md) for how the pieces fit together. The short version:
1027
1033
 
1028
1034
  ```bash
1029
1035
  pip install -e ".[dev]"
@@ -1075,7 +1081,7 @@ proxyscraper/
1075
1081
 
1076
1082
  ## Community
1077
1083
 
1078
- Questions, ideas and things you built with it go to [Discussions](https://github.com/maximilianfeix/proxy-scraper/discussions) – bugs to the [issues](../../issues). If proxy-scraper saves you time, a ⭐ helps others find it.
1084
+ Questions, ideas and things you built with it go to [Discussions](https://github.com/maximilianfeix/proxy-scraper/discussions) – bugs to the [issues](https://github.com/maximilianfeix/proxy-scraper/issues). If proxy-scraper saves you time, a ⭐ helps others find it.
1079
1085
 
1080
1086
  Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
1081
1087
 
@@ -1083,7 +1089,7 @@ Thanks to everyone who helped build it – new sources, countries, Python 3.14,
1083
1089
  <img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
1084
1090
  </a>
1085
1091
 
1086
- Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1092
+ Want to join? [Beginner-friendly issues](https://github.com/maximilianfeix/proxy-scraper/issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1087
1093
 
1088
1094
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
1089
1095
  <picture>
@@ -1097,7 +1103,7 @@ Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22goo
1097
1103
 
1098
1104
  ## Acknowledgements
1099
1105
 
1100
- proxy-scraper stands on the work of the people who publish free proxy lists. Thanks to everyone listed in [`sources.json`](proxyscraper/sources.json), and especially to
1106
+ proxy-scraper stands on the work of the people who publish free proxy lists. Thanks to everyone listed in [`sources.json`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/proxyscraper/sources.json), and especially to
1101
1107
 
1102
1108
  - [monosans/proxy-scraper-checker](https://github.com/monosans/proxy-scraper-checker) and [gfpcom/free-proxy-list](https://github.com/gfpcom/free-proxy-list), whose curated source collections are read as meta sources
1103
1109
  - [Textualize/rich](https://github.com/Textualize/rich), which draws the whole terminal UI
@@ -1112,7 +1118,7 @@ This tool only collects publicly listed proxies and checks whether they work. Yo
1112
1118
 
1113
1119
  ---
1114
1120
 
1115
- <sub>Made in Germany by <a href="https://github.com/maximilianfeix">@maximilianfeix</a> · <a href="LICENSE">MIT License</a> · <a href="CHANGELOG.md">Changelog</a> · <a href="SECURITY.md">Security</a> · <a href="CONTRIBUTING.md">Contributing</a></sub>
1121
+ <sub>Made in Germany by <a href="https://github.com/maximilianfeix">@maximilianfeix</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/LICENSE">MIT License</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/CHANGELOG.md">Changelog</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/SECURITY.md">Security</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.27.0/CONTRIBUTING.md">Contributing</a></sub>
1116
1122
 
1117
1123
  <sub>If proxy-scraper saves you time, a ⭐ helps others find it.</sub>
1118
1124