proxy-scraper-cli 1.25.0__tar.gz → 1.26.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 (138) hide show
  1. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/PKG-INFO +50 -46
  2. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/README.md +47 -45
  3. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/PKG-INFO +50 -46
  4. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/SOURCES.txt +8 -1
  5. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/requires.txt +2 -0
  6. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/__init__.py +1 -1
  7. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/app.py +11 -4
  8. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/mirror.py +2 -0
  9. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/parsing.py +29 -4
  10. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/pyproject.toml +1 -1
  11. proxy_scraper_cli-1.26.0/tests/test_citation.py +23 -0
  12. proxy_scraper_cli-1.26.0/tests/test_colon_logins.py +86 -0
  13. proxy_scraper_cli-1.26.0/tests/test_hf_card.py +18 -0
  14. proxy_scraper_cli-1.26.0/tests/test_hf_parquet.py +98 -0
  15. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_mirror.py +8 -0
  16. proxy_scraper_cli-1.26.0/tests/test_pypi_readme.py +129 -0
  17. proxy_scraper_cli-1.26.0/tests/test_workflow_permissions.py +42 -0
  18. proxy_scraper_cli-1.26.0/tests/test_workflow_pins.py +34 -0
  19. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/LICENSE +0 -0
  20. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
  21. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
  22. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
  23. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/__main__.py +0 -0
  24. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/action.py +0 -0
  25. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/agent.py +0 -0
  26. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/api.py +0 -0
  27. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/asndb.py +0 -0
  28. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/blocklist.py +0 -0
  29. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/charts.py +0 -0
  30. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/checker.py +0 -0
  31. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/cli.py +0 -0
  32. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/compat.py +0 -0
  33. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/completion.py +0 -0
  34. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/exporters.py +0 -0
  35. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/fetchcache.py +0 -0
  36. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/geo.py +0 -0
  37. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/geodb.py +0 -0
  38. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/handshake.py +0 -0
  39. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/history.py +0 -0
  40. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/judges.py +0 -0
  41. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/mcp_entry.py +0 -0
  42. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/mcp_server.py +0 -0
  43. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/netio.py +0 -0
  44. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/options.py +0 -0
  45. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/output.py +0 -0
  46. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/pages.py +0 -0
  47. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/paths.py +0 -0
  48. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/pipeline.py +0 -0
  49. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/preferences.py +0 -0
  50. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/proxypages.py +0 -0
  51. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/publish.py +0 -0
  52. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ranking.py +0 -0
  53. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/report.py +0 -0
  54. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/runsteps.py +0 -0
  55. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/__init__.py +0 -0
  56. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/api.py +0 -0
  57. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/core.py +0 -0
  58. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/dashboard.html +0 -0
  59. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/http.py +0 -0
  60. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/pool.py +0 -0
  61. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/socks.py +0 -0
  62. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/status.py +0 -0
  63. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/server/upstream.py +0 -0
  64. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/site/apple-touch-icon.png +0 -0
  65. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
  66. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/site/index.html +0 -0
  67. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/site/logo.png +0 -0
  68. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/site/og.png +0 -0
  69. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/sites.py +0 -0
  70. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/sources.json +0 -0
  71. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/sources.py +0 -0
  72. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/speed.py +0 -0
  73. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/targets.py +0 -0
  74. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/__init__.py +0 -0
  75. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/dashboard.py +0 -0
  76. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/keys.py +0 -0
  77. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/report.py +0 -0
  78. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/serve.py +0 -0
  79. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/widgets.py +0 -0
  80. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/proxyscraper/ui/wizard.py +0 -0
  81. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/setup.cfg +0 -0
  82. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_action.py +0 -0
  83. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_agent.py +0 -0
  84. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_api.py +0 -0
  85. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_app.py +0 -0
  86. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_asndb.py +0 -0
  87. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_auth.py +0 -0
  88. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_blocklist.py +0 -0
  89. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_charts.py +0 -0
  90. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_checker.py +0 -0
  91. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_compat.py +0 -0
  92. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_completion.py +0 -0
  93. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_discovery_growth.py +0 -0
  94. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_exporters.py +0 -0
  95. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_fetchcache.py +0 -0
  96. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_geodb.py +0 -0
  97. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_judges.py +0 -0
  98. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_learning.py +0 -0
  99. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_live_api.py +0 -0
  100. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_mcp_server.py +0 -0
  101. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_mine_sources.py +0 -0
  102. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_options.py +0 -0
  103. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_output_stdout.py +0 -0
  104. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_own_sources.py +0 -0
  105. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_pac.py +0 -0
  106. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_packaging.py +0 -0
  107. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_pages.py +0 -0
  108. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_parsing.py +0 -0
  109. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_parsing_fuzz.py +0 -0
  110. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_paths.py +0 -0
  111. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_pick.py +0 -0
  112. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_pipeline.py +0 -0
  113. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_preferences.py +0 -0
  114. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_proxy_pages.py +0 -0
  115. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_proxy_sources.py +0 -0
  116. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_publish.py +0 -0
  117. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_recheck_stdin.py +0 -0
  118. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_report.py +0 -0
  119. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_robustness.py +0 -0
  120. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_rotator.py +0 -0
  121. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_serve_api.py +0 -0
  122. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_serve_dashboard.py +0 -0
  123. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_serve_password.py +0 -0
  124. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_serve_refill.py +0 -0
  125. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_serve_v2.py +0 -0
  126. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_server.py +0 -0
  127. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_server_closed_writer.py +0 -0
  128. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_server_fixes.py +0 -0
  129. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_sites.py +0 -0
  130. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_sources_json.py +0 -0
  131. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_speed.py +0 -0
  132. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_speed_ranking.py +0 -0
  133. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_survival_ranking.py +0 -0
  134. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_tamper.py +0 -0
  135. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_targets.py +0 -0
  136. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_ui.py +0 -0
  137. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.0}/tests/test_uptime.py +0 -0
  138. {proxy_scraper_cli-1.25.0 → proxy_scraper_cli-1.26.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.26.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.26.0/docs/banner-dark.svg">
49
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/banner-light.svg">
50
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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
 
@@ -354,7 +358,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
354
358
  <td valign="top">
355
359
 
356
360
  **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.
361
+ 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.26.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
362
 
359
363
  </td>
360
364
  <td valign="top">
@@ -539,7 +543,7 @@ proxy-scraper --recheck --serve --serve-host 0.0.0.0
539
543
  curl -x "http://country-de:$PROXY_SCRAPER_SERVE_PASSWORD@your-server:8899" https://api.ipify.org
540
544
  ```
541
545
 
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`.
546
+ 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.26.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
547
 
544
548
  | Option | What it does |
545
549
  |---|---|
@@ -560,7 +564,7 @@ In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In th
560
564
 
561
565
  **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
566
 
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>
567
+ <div align="center"><img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.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
568
 
565
569
  <a id="pool-api"></a>
566
570
 
@@ -598,16 +602,16 @@ requests.get("https://example.com", proxies={"http": proxy, "https": proxy})
598
602
 
599
603
  ## Discord and Telegram bot
600
604
 
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).
605
+ The live list can also come to you: [`bot/`](https://github.com/maximilianfeix/proxy-scraper/tree/v1.26.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.26.0/bot/README.md).
602
606
 
603
607
  <a id="how-it-works"></a>
604
608
 
605
609
  ## How it works
606
610
 
607
611
  <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%">
612
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/checks-dark.svg">
613
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/checks-light.svg">
614
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.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
615
  </picture>
612
616
 
613
617
 
@@ -622,7 +626,7 @@ flowchart LR
622
626
  G -. next run .-> C
623
627
  ```
624
628
 
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.
629
+ 1. **Sources** – the curated list in [`sources.json`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.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
630
  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
631
  3. **Prioritize** – known working proxies first, then by the learned hit rate of their sources.
628
632
  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 +638,9 @@ flowchart LR
634
638
  <summary><b>📸 See the live dashboard and final report</b></summary>
635
639
  <br>
636
640
  <div align="center">
637
- <img src="docs/dashboard.svg" alt="Live dashboard while checking" width="860">
641
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/dashboard.svg" alt="Live dashboard while checking" width="860">
638
642
  <br><br>
639
- <img src="docs/summary.svg" alt="Final report after a run" width="860">
643
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/summary.svg" alt="Final report after a run" width="860">
640
644
  </div>
641
645
  </details>
642
646
 
@@ -647,7 +651,7 @@ proxy-scraper --source https://example.com/my-list.txt --source socks5=./socks.t
647
651
  proxy-scraper --only-sources --source bought.txt --want 50 # only yours
648
652
  ```
649
653
 
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=…`.
654
+ 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
655
 
652
656
  <a id="output"></a>
653
657
 
@@ -805,7 +809,7 @@ Username wishes – `country-us` sends everything out through US proxies, `sessi
805
809
  proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
806
810
  ```
807
811
 
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:
812
+ **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
813
 
810
814
  ```bash
811
815
  curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
@@ -919,13 +923,13 @@ The repo does part of the work itself:
919
923
 
920
924
  | Workflow | What it does |
921
925
  |---|---|
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/` |
926
+ | [**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 |
927
+ | [**lint**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/lint.yml) | `ruff` with a pinned version – same rules locally and in CI |
928
+ | [**codeql**](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/codeql.yml) | security analysis on every push and once a week |
929
+ | [**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 |
930
+ | [**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` |
931
+ | [**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 |
932
+ | [**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
933
  | **Dependabot** | keeps the action versions up to date |
930
934
 
931
935
  <a id="faq"></a>
@@ -1003,9 +1007,9 @@ Only for things that don't matter. Public proxies are run by strangers who can r
1003
1007
 
1004
1008
  ## Roadmap
1005
1009
 
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.
1010
+ 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
1011
 
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.
1012
+ 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
1013
 
1010
1014
  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
1015
 
@@ -1013,17 +1017,17 @@ Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere,
1013
1017
 
1014
1018
  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
1019
 
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.
1020
+ 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
1021
 
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.
1022
+ 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
1023
 
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)).
1024
+ 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
1025
 
1022
1026
  <a id="contributing"></a>
1023
1027
 
1024
1028
  ## Contributing
1025
1029
 
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:
1030
+ Bug reports, new sources and pull requests are very welcome – see [CONTRIBUTING.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/CONTRIBUTING.md), and [docs/ARCHITECTURE.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/docs/ARCHITECTURE.md) for how the pieces fit together. The short version:
1027
1031
 
1028
1032
  ```bash
1029
1033
  pip install -e ".[dev]"
@@ -1075,7 +1079,7 @@ proxyscraper/
1075
1079
 
1076
1080
  ## Community
1077
1081
 
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.
1082
+ 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
1083
 
1080
1084
  Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
1081
1085
 
@@ -1083,7 +1087,7 @@ Thanks to everyone who helped build it – new sources, countries, Python 3.14,
1083
1087
  <img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
1084
1088
  </a>
1085
1089
 
1086
- Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1090
+ 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
1091
 
1088
1092
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
1089
1093
  <picture>
@@ -1097,7 +1101,7 @@ Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22goo
1097
1101
 
1098
1102
  ## Acknowledgements
1099
1103
 
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
1104
+ 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.26.0/proxyscraper/sources.json), and especially to
1101
1105
 
1102
1106
  - [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
1107
  - [Textualize/rich](https://github.com/Textualize/rich), which draws the whole terminal UI
@@ -1112,7 +1116,7 @@ This tool only collects publicly listed proxies and checks whether they work. Yo
1112
1116
 
1113
1117
  ---
1114
1118
 
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>
1119
+ <sub>Made in Germany by <a href="https://github.com/maximilianfeix">@maximilianfeix</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/LICENSE">MIT License</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/CHANGELOG.md">Changelog</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/SECURITY.md">Security</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/CONTRIBUTING.md">Contributing</a></sub>
1116
1120
 
1117
1121
  <sub>If proxy-scraper saves you time, a ⭐ helps others find it.</sub>
1118
1122