proxy-scraper-cli 1.23.0__tar.gz → 1.25.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 (131) hide show
  1. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/PKG-INFO +76 -11
  2. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/README.md +75 -10
  3. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/PKG-INFO +76 -11
  4. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/SOURCES.txt +1 -0
  5. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/__init__.py +1 -1
  6. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/api.py +1 -1
  7. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/app.py +99 -6
  8. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/cli.py +1 -1
  9. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/pages.py +2 -2
  10. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/parsing.py +5 -4
  11. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/site/index.html +3 -3
  12. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/sites.py +3 -0
  13. proxy_scraper_cli-1.25.0/tests/test_recheck_stdin.py +263 -0
  14. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_sites.py +22 -5
  15. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/LICENSE +0 -0
  16. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
  17. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
  18. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/requires.txt +0 -0
  19. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
  20. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/__main__.py +0 -0
  21. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/action.py +0 -0
  22. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/agent.py +0 -0
  23. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/asndb.py +0 -0
  24. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/blocklist.py +0 -0
  25. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/charts.py +0 -0
  26. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/checker.py +0 -0
  27. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/compat.py +0 -0
  28. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/completion.py +0 -0
  29. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/exporters.py +0 -0
  30. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/fetchcache.py +0 -0
  31. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/geo.py +0 -0
  32. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/geodb.py +0 -0
  33. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/handshake.py +0 -0
  34. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/history.py +0 -0
  35. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/judges.py +0 -0
  36. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/mcp_entry.py +0 -0
  37. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/mcp_server.py +0 -0
  38. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/mirror.py +0 -0
  39. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/netio.py +0 -0
  40. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/options.py +0 -0
  41. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/output.py +0 -0
  42. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/paths.py +0 -0
  43. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/pipeline.py +0 -0
  44. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/preferences.py +0 -0
  45. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/proxypages.py +0 -0
  46. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/publish.py +0 -0
  47. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ranking.py +0 -0
  48. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/report.py +0 -0
  49. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/runsteps.py +0 -0
  50. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/__init__.py +0 -0
  51. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/api.py +0 -0
  52. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/core.py +0 -0
  53. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/dashboard.html +0 -0
  54. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/http.py +0 -0
  55. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/pool.py +0 -0
  56. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/socks.py +0 -0
  57. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/status.py +0 -0
  58. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/server/upstream.py +0 -0
  59. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/site/apple-touch-icon.png +0 -0
  60. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
  61. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/site/logo.png +0 -0
  62. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/site/og.png +0 -0
  63. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/sources.json +0 -0
  64. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/sources.py +0 -0
  65. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/speed.py +0 -0
  66. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/targets.py +0 -0
  67. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/__init__.py +0 -0
  68. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/dashboard.py +0 -0
  69. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/keys.py +0 -0
  70. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/report.py +0 -0
  71. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/serve.py +0 -0
  72. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/widgets.py +0 -0
  73. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/proxyscraper/ui/wizard.py +0 -0
  74. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/pyproject.toml +0 -0
  75. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/setup.cfg +0 -0
  76. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_action.py +0 -0
  77. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_agent.py +0 -0
  78. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_api.py +0 -0
  79. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_app.py +0 -0
  80. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_asndb.py +0 -0
  81. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_auth.py +0 -0
  82. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_blocklist.py +0 -0
  83. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_charts.py +0 -0
  84. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_checker.py +0 -0
  85. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_compat.py +0 -0
  86. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_completion.py +0 -0
  87. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_discovery_growth.py +0 -0
  88. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_exporters.py +0 -0
  89. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_fetchcache.py +0 -0
  90. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_geodb.py +0 -0
  91. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_judges.py +0 -0
  92. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_learning.py +0 -0
  93. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_live_api.py +0 -0
  94. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_mcp_server.py +0 -0
  95. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_mine_sources.py +0 -0
  96. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_mirror.py +0 -0
  97. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_options.py +0 -0
  98. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_output_stdout.py +0 -0
  99. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_own_sources.py +0 -0
  100. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_pac.py +0 -0
  101. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_packaging.py +0 -0
  102. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_pages.py +0 -0
  103. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_parsing.py +0 -0
  104. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_parsing_fuzz.py +0 -0
  105. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_paths.py +0 -0
  106. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_pick.py +0 -0
  107. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_pipeline.py +0 -0
  108. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_preferences.py +0 -0
  109. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_proxy_pages.py +0 -0
  110. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_proxy_sources.py +0 -0
  111. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_publish.py +0 -0
  112. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_report.py +0 -0
  113. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_robustness.py +0 -0
  114. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_rotator.py +0 -0
  115. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_serve_api.py +0 -0
  116. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_serve_dashboard.py +0 -0
  117. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_serve_password.py +0 -0
  118. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_serve_refill.py +0 -0
  119. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_serve_v2.py +0 -0
  120. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_server.py +0 -0
  121. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_server_closed_writer.py +0 -0
  122. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_server_fixes.py +0 -0
  123. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_sources_json.py +0 -0
  124. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_speed.py +0 -0
  125. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_speed_ranking.py +0 -0
  126. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_survival_ranking.py +0 -0
  127. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_tamper.py +0 -0
  128. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_targets.py +0 -0
  129. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_ui.py +0 -0
  130. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.0}/tests/test_uptime.py +0 -0
  131. {proxy_scraper_cli-1.23.0 → proxy_scraper_cli-1.25.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.23.0
3
+ Version: 1.25.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
@@ -52,6 +52,7 @@ Dynamic: license-file
52
52
  [![Release](https://img.shields.io/github/v/release/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/releases/latest)
53
53
  [![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
54
  [![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
+ [![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)
55
56
  [![Python](https://img.shields.io/badge/python-3.9–3.14-D4F77A?style=flat-square&labelColor=121113)](pyproject.toml)
56
57
  [![Stars](https://img.shields.io/github/stars/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/stargazers)
57
58
  [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](LICENSE)
@@ -75,16 +76,23 @@ Most free proxy lists are 95 % dead, and a good part of the rest are honeypots o
75
76
 
76
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)
77
78
 
78
- <picture>
79
- <source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
80
- <source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
81
- <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%">
82
- </picture>
79
+ **Try it – no install, about five seconds:**
80
+
81
+ ```bash
82
+ uvx proxy-scraper-cli --pick 5 --types socks5 # 5 checked proxies
83
+
84
+ # or just the plain list
85
+ curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
86
+ ```
87
+
88
+ `uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
83
89
 
84
90
  <div align="center">
85
- <img src="docs/demo.svg" alt="Animated demo: setup wizard, collecting, live dashboard and final report" width="880">
91
+ <img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
86
92
  </div>
87
93
 
94
+ > **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)
95
+
88
96
  <details>
89
97
  <summary><b>Table of contents</b></summary>
90
98
 
@@ -222,7 +230,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
222
230
  | HTTP · SOCKS4 · SOCKS5 | `1.2.3.4:8080` | [http.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt) · [socks4.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt) · [socks5.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt) |
223
231
  | HTTPS-capable only | `type://ip:port` | [https.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/https.txt) |
224
232
  | Elite only | `type://ip:port` | [elite.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/elite.txt) |
225
- | Gets through to Google · Reddit · Amazon · Instagram · TikTok (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) |
233
+ | Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) · [discord.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/discord.txt) |
226
234
  | Stable, on the list in 90 %+ of this week's runs | `type://ip:port` | [stable.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/stable.txt) |
227
235
  | With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | [proxies.json](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.json) · [proxies.csv](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.csv) |
228
236
 
@@ -278,7 +286,7 @@ claude mcp add proxy-scraper -- uvx --python ">=3.10" --from "proxy-scraper-cli[
278
286
  ```
279
287
 
280
288
  <details>
281
- <summary><b>VS Code, Codex, or without uv</b></summary>
289
+ <summary><b>VS Code, Codex, Docker, or without uv</b></summary>
282
290
 
283
291
  **VS Code** – `.vscode/mcp.json`:
284
292
 
@@ -304,6 +312,19 @@ args = ["--python", ">=3.10", "--from", "proxy-scraper-cli[mcp]", "proxy-scraper
304
312
 
305
313
  **Without uv:** `pipx install --python python3.12 "proxy-scraper-cli[mcp]"` (any Python 3.10+), then use `proxy-scraper-mcp` as the command.
306
314
 
315
+ **Docker** – no Python needed, the image has everything:
316
+
317
+ ```json
318
+ {
319
+ "mcpServers": {
320
+ "proxy-scraper": {
321
+ "command": "docker",
322
+ "args": ["run", "-i", "--rm", "ghcr.io/maximilianfeix/proxy-scraper", "--mcp"]
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
307
328
  It's also in the [official MCP registry](https://registry.modelcontextprotocol.io) as `io.github.maximilianfeix/proxy-scraper`, so clients that browse the registry can install it from there.
308
329
 
309
330
  </details>
@@ -460,7 +481,7 @@ pool = itertools.cycle(p.url for p in proxies)
460
481
  r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
461
482
  ```
462
483
 
463
- Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
484
+ Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`, `"discord"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
464
485
 
465
486
  Or let the library do the retrying: `ProxyRotator` loads a URL through the list and moves on to the next proxy when one fails – HTTPS only through proxies with verified TLS.
466
487
 
@@ -583,6 +604,13 @@ The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts e
583
604
 
584
605
  ## How it works
585
606
 
607
+ <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%">
611
+ </picture>
612
+
613
+
586
614
  ```mermaid
587
615
  flowchart LR
588
616
  A[sources.json<br/>meta lists<br/>GitHub discovery] --> B[Fetch & parse<br/>in parallel on all cores]
@@ -777,6 +805,14 @@ Username wishes – `country-us` sends everything out through US proxies, `sessi
777
805
  proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
778
806
  ```
779
807
 
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:
809
+
810
+ ```bash
811
+ curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
812
+ ```
813
+
814
+ Proxies without a type are tried as HTTP and as SOCKS5 – or as SOCKS4 with `--types socks4` alone. A password with a comma, quote, `|` or bracket can't be told apart from the text around it in a paste; put such proxies in a file, one per line, and use `--recheck file.txt`.
815
+
780
816
  **Any tool, through the rotating server**
781
817
 
782
818
  ```bash
@@ -849,7 +885,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
849
885
  | `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
850
886
  | `--no-dnsbl` | skip the blocklist lookup |
851
887
  | `--target URL` | only proxies that reach this site (repeatable) |
852
- | `--recheck [FILE\|live]` | only check proxies from a file, the last run, or the public live list |
888
+ | `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
853
889
  | `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
854
890
  | `--no-geo` | skip the country lookup |
855
891
  | `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
@@ -896,6 +932,25 @@ The repo does part of the work itself:
896
932
 
897
933
  ## FAQ
898
934
 
935
+ <a id="who-runs-free-proxies"></a>
936
+
937
+ <details open>
938
+ <summary><b>Who runs free proxies – and should you use them?</b></summary>
939
+ <br>
940
+
941
+ Almost nobody runs a free proxy for you. What ends up on public lists is usually one of these:
942
+
943
+ - **Misconfigured servers** – a Squid, a router or an app with a proxy port that was meant to stay internal.
944
+ - **Deliberately open proxies** – a few volunteers and research projects, and services that give some away to sell the rest.
945
+ - **Infected machines** – computers and IoT devices whose owners don't know they relay traffic. Many residential exits are like this.
946
+ - **Traps** – honeypots that log what goes through them, and proxies that rewrite pages to inject ads or scripts.
947
+
948
+ proxy-scraper can't tell an infected home router from an open office proxy, but it filters what it can measure: a proxy has to answer two independent requests with the same exit IP (honeypots that only answer scanners drop out), deliver a known page byte for byte (injectors drop out), and HTTPS counts only with a certificate that verifies end to end. Each hit says whether its exit is in a datacenter.
949
+
950
+ Good uses: public data, checking how a site looks from another country, testing your own blocking and rate limits, research. Never send passwords, cookies, payment or personal data through a free proxy, and keep HTTPS certificate checks on. Use them only where you're allowed to.
951
+
952
+ </details>
953
+
899
954
  <details>
900
955
  <summary><b>Almost nothing gets through.</b></summary>
901
956
  <br>
@@ -950,6 +1005,8 @@ Only for things that don't matter. Public proxies are run by strangers who can r
950
1005
 
951
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.
952
1007
 
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.
1009
+
953
1010
  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.
954
1011
 
955
1012
  Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere, daily snapshots, a rotating proxy URL for requests, httpx and Playwright, `--pick` for working proxies without a scan, a proxy pool API compatible with jhao104/proxy_pool, your own lists with `--source`, a GitHub Action, a Telegram bot and an Atom feed for the weekly report.
@@ -1020,6 +1077,14 @@ proxyscraper/
1020
1077
 
1021
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.
1022
1079
 
1080
+ Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
1081
+
1082
+ <a href="https://github.com/maximilianfeix/proxy-scraper/graphs/contributors">
1083
+ <img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
1084
+ </a>
1085
+
1086
+ Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1087
+
1023
1088
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
1024
1089
  <picture>
1025
1090
  <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
@@ -10,6 +10,7 @@
10
10
  [![Release](https://img.shields.io/github/v/release/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/releases/latest)
11
11
  [![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)
12
12
  [![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/)
13
+ [![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)
13
14
  [![Python](https://img.shields.io/badge/python-3.9–3.14-D4F77A?style=flat-square&labelColor=121113)](pyproject.toml)
14
15
  [![Stars](https://img.shields.io/github/stars/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/stargazers)
15
16
  [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](LICENSE)
@@ -33,16 +34,23 @@ Most free proxy lists are 95 % dead, and a good part of the rest are honeypots o
33
34
 
34
35
  **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)
35
36
 
36
- <picture>
37
- <source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
38
- <source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
39
- <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%">
40
- </picture>
37
+ **Try it – no install, about five seconds:**
38
+
39
+ ```bash
40
+ uvx proxy-scraper-cli --pick 5 --types socks5 # 5 checked proxies
41
+
42
+ # or just the plain list
43
+ curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
44
+ ```
45
+
46
+ `uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
41
47
 
42
48
  <div align="center">
43
- <img src="docs/demo.svg" alt="Animated demo: setup wizard, collecting, live dashboard and final report" width="880">
49
+ <img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
44
50
  </div>
45
51
 
52
+ > **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)
53
+
46
54
  <details>
47
55
  <summary><b>Table of contents</b></summary>
48
56
 
@@ -180,7 +188,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
180
188
  | HTTP · SOCKS4 · SOCKS5 | `1.2.3.4:8080` | [http.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt) · [socks4.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt) · [socks5.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt) |
181
189
  | HTTPS-capable only | `type://ip:port` | [https.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/https.txt) |
182
190
  | Elite only | `type://ip:port` | [elite.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/elite.txt) |
183
- | Gets through to Google · Reddit · Amazon · Instagram · TikTok (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) |
191
+ | Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) · [discord.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/discord.txt) |
184
192
  | Stable, on the list in 90 %+ of this week's runs | `type://ip:port` | [stable.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/stable.txt) |
185
193
  | With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | [proxies.json](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.json) · [proxies.csv](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.csv) |
186
194
 
@@ -236,7 +244,7 @@ claude mcp add proxy-scraper -- uvx --python ">=3.10" --from "proxy-scraper-cli[
236
244
  ```
237
245
 
238
246
  <details>
239
- <summary><b>VS Code, Codex, or without uv</b></summary>
247
+ <summary><b>VS Code, Codex, Docker, or without uv</b></summary>
240
248
 
241
249
  **VS Code** – `.vscode/mcp.json`:
242
250
 
@@ -262,6 +270,19 @@ args = ["--python", ">=3.10", "--from", "proxy-scraper-cli[mcp]", "proxy-scraper
262
270
 
263
271
  **Without uv:** `pipx install --python python3.12 "proxy-scraper-cli[mcp]"` (any Python 3.10+), then use `proxy-scraper-mcp` as the command.
264
272
 
273
+ **Docker** – no Python needed, the image has everything:
274
+
275
+ ```json
276
+ {
277
+ "mcpServers": {
278
+ "proxy-scraper": {
279
+ "command": "docker",
280
+ "args": ["run", "-i", "--rm", "ghcr.io/maximilianfeix/proxy-scraper", "--mcp"]
281
+ }
282
+ }
283
+ }
284
+ ```
285
+
265
286
  It's also in the [official MCP registry](https://registry.modelcontextprotocol.io) as `io.github.maximilianfeix/proxy-scraper`, so clients that browse the registry can install it from there.
266
287
 
267
288
  </details>
@@ -418,7 +439,7 @@ pool = itertools.cycle(p.url for p in proxies)
418
439
  r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
419
440
  ```
420
441
 
421
- Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
442
+ Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`, `"discord"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
422
443
 
423
444
  Or let the library do the retrying: `ProxyRotator` loads a URL through the list and moves on to the next proxy when one fails – HTTPS only through proxies with verified TLS.
424
445
 
@@ -541,6 +562,13 @@ The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts e
541
562
 
542
563
  ## How it works
543
564
 
565
+ <picture>
566
+ <source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
567
+ <source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
568
+ <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%">
569
+ </picture>
570
+
571
+
544
572
  ```mermaid
545
573
  flowchart LR
546
574
  A[sources.json<br/>meta lists<br/>GitHub discovery] --> B[Fetch & parse<br/>in parallel on all cores]
@@ -735,6 +763,14 @@ Username wishes – `country-us` sends everything out through US proxies, `sessi
735
763
  proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
736
764
  ```
737
765
 
766
+ **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:
767
+
768
+ ```bash
769
+ curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
770
+ ```
771
+
772
+ Proxies without a type are tried as HTTP and as SOCKS5 – or as SOCKS4 with `--types socks4` alone. A password with a comma, quote, `|` or bracket can't be told apart from the text around it in a paste; put such proxies in a file, one per line, and use `--recheck file.txt`.
773
+
738
774
  **Any tool, through the rotating server**
739
775
 
740
776
  ```bash
@@ -807,7 +843,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
807
843
  | `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
808
844
  | `--no-dnsbl` | skip the blocklist lookup |
809
845
  | `--target URL` | only proxies that reach this site (repeatable) |
810
- | `--recheck [FILE\|live]` | only check proxies from a file, the last run, or the public live list |
846
+ | `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
811
847
  | `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
812
848
  | `--no-geo` | skip the country lookup |
813
849
  | `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
@@ -854,6 +890,25 @@ The repo does part of the work itself:
854
890
 
855
891
  ## FAQ
856
892
 
893
+ <a id="who-runs-free-proxies"></a>
894
+
895
+ <details open>
896
+ <summary><b>Who runs free proxies – and should you use them?</b></summary>
897
+ <br>
898
+
899
+ Almost nobody runs a free proxy for you. What ends up on public lists is usually one of these:
900
+
901
+ - **Misconfigured servers** – a Squid, a router or an app with a proxy port that was meant to stay internal.
902
+ - **Deliberately open proxies** – a few volunteers and research projects, and services that give some away to sell the rest.
903
+ - **Infected machines** – computers and IoT devices whose owners don't know they relay traffic. Many residential exits are like this.
904
+ - **Traps** – honeypots that log what goes through them, and proxies that rewrite pages to inject ads or scripts.
905
+
906
+ proxy-scraper can't tell an infected home router from an open office proxy, but it filters what it can measure: a proxy has to answer two independent requests with the same exit IP (honeypots that only answer scanners drop out), deliver a known page byte for byte (injectors drop out), and HTTPS counts only with a certificate that verifies end to end. Each hit says whether its exit is in a datacenter.
907
+
908
+ Good uses: public data, checking how a site looks from another country, testing your own blocking and rate limits, research. Never send passwords, cookies, payment or personal data through a free proxy, and keep HTTPS certificate checks on. Use them only where you're allowed to.
909
+
910
+ </details>
911
+
857
912
  <details>
858
913
  <summary><b>Almost nothing gets through.</b></summary>
859
914
  <br>
@@ -908,6 +963,8 @@ Only for things that don't matter. Public proxies are run by strangers who can r
908
963
 
909
964
  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.
910
965
 
966
+ 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.
967
+
911
968
  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.
912
969
 
913
970
  Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere, daily snapshots, a rotating proxy URL for requests, httpx and Playwright, `--pick` for working proxies without a scan, a proxy pool API compatible with jhao104/proxy_pool, your own lists with `--source`, a GitHub Action, a Telegram bot and an Atom feed for the weekly report.
@@ -978,6 +1035,14 @@ proxyscraper/
978
1035
 
979
1036
  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.
980
1037
 
1038
+ Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
1039
+
1040
+ <a href="https://github.com/maximilianfeix/proxy-scraper/graphs/contributors">
1041
+ <img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
1042
+ </a>
1043
+
1044
+ Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1045
+
981
1046
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
982
1047
  <picture>
983
1048
  <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proxy-scraper-cli
3
- Version: 1.23.0
3
+ Version: 1.25.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
@@ -52,6 +52,7 @@ Dynamic: license-file
52
52
  [![Release](https://img.shields.io/github/v/release/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/releases/latest)
53
53
  [![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
54
  [![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
+ [![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)
55
56
  [![Python](https://img.shields.io/badge/python-3.9–3.14-D4F77A?style=flat-square&labelColor=121113)](pyproject.toml)
56
57
  [![Stars](https://img.shields.io/github/stars/maximilianfeix/proxy-scraper?style=flat-square&color=D4F77A&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/stargazers)
57
58
  [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](LICENSE)
@@ -75,16 +76,23 @@ Most free proxy lists are 95 % dead, and a good part of the rest are honeypots o
75
76
 
76
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)
77
78
 
78
- <picture>
79
- <source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
80
- <source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
81
- <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%">
82
- </picture>
79
+ **Try it – no install, about five seconds:**
80
+
81
+ ```bash
82
+ uvx proxy-scraper-cli --pick 5 --types socks5 # 5 checked proxies
83
+
84
+ # or just the plain list
85
+ curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
86
+ ```
87
+
88
+ `uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
83
89
 
84
90
  <div align="center">
85
- <img src="docs/demo.svg" alt="Animated demo: setup wizard, collecting, live dashboard and final report" width="880">
91
+ <img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
86
92
  </div>
87
93
 
94
+ > **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)
95
+
88
96
  <details>
89
97
  <summary><b>Table of contents</b></summary>
90
98
 
@@ -222,7 +230,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
222
230
  | HTTP · SOCKS4 · SOCKS5 | `1.2.3.4:8080` | [http.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt) · [socks4.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt) · [socks5.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt) |
223
231
  | HTTPS-capable only | `type://ip:port` | [https.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/https.txt) |
224
232
  | Elite only | `type://ip:port` | [elite.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/elite.txt) |
225
- | Gets through to Google · Reddit · Amazon · Instagram · TikTok (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) |
233
+ | Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) · [discord.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/discord.txt) |
226
234
  | Stable, on the list in 90 %+ of this week's runs | `type://ip:port` | [stable.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/stable.txt) |
227
235
  | With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | [proxies.json](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.json) · [proxies.csv](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.csv) |
228
236
 
@@ -278,7 +286,7 @@ claude mcp add proxy-scraper -- uvx --python ">=3.10" --from "proxy-scraper-cli[
278
286
  ```
279
287
 
280
288
  <details>
281
- <summary><b>VS Code, Codex, or without uv</b></summary>
289
+ <summary><b>VS Code, Codex, Docker, or without uv</b></summary>
282
290
 
283
291
  **VS Code** – `.vscode/mcp.json`:
284
292
 
@@ -304,6 +312,19 @@ args = ["--python", ">=3.10", "--from", "proxy-scraper-cli[mcp]", "proxy-scraper
304
312
 
305
313
  **Without uv:** `pipx install --python python3.12 "proxy-scraper-cli[mcp]"` (any Python 3.10+), then use `proxy-scraper-mcp` as the command.
306
314
 
315
+ **Docker** – no Python needed, the image has everything:
316
+
317
+ ```json
318
+ {
319
+ "mcpServers": {
320
+ "proxy-scraper": {
321
+ "command": "docker",
322
+ "args": ["run", "-i", "--rm", "ghcr.io/maximilianfeix/proxy-scraper", "--mcp"]
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
307
328
  It's also in the [official MCP registry](https://registry.modelcontextprotocol.io) as `io.github.maximilianfeix/proxy-scraper`, so clients that browse the registry can install it from there.
308
329
 
309
330
  </details>
@@ -460,7 +481,7 @@ pool = itertools.cycle(p.url for p in proxies)
460
481
  r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
461
482
  ```
462
483
 
463
- Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
484
+ Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`, `"discord"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
464
485
 
465
486
  Or let the library do the retrying: `ProxyRotator` loads a URL through the list and moves on to the next proxy when one fails – HTTPS only through proxies with verified TLS.
466
487
 
@@ -583,6 +604,13 @@ The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts e
583
604
 
584
605
  ## How it works
585
606
 
607
+ <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%">
611
+ </picture>
612
+
613
+
586
614
  ```mermaid
587
615
  flowchart LR
588
616
  A[sources.json<br/>meta lists<br/>GitHub discovery] --> B[Fetch & parse<br/>in parallel on all cores]
@@ -777,6 +805,14 @@ Username wishes – `country-us` sends everything out through US proxies, `sessi
777
805
  proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
778
806
  ```
779
807
 
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:
809
+
810
+ ```bash
811
+ curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
812
+ ```
813
+
814
+ Proxies without a type are tried as HTTP and as SOCKS5 – or as SOCKS4 with `--types socks4` alone. A password with a comma, quote, `|` or bracket can't be told apart from the text around it in a paste; put such proxies in a file, one per line, and use `--recheck file.txt`.
815
+
780
816
  **Any tool, through the rotating server**
781
817
 
782
818
  ```bash
@@ -849,7 +885,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
849
885
  | `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
850
886
  | `--no-dnsbl` | skip the blocklist lookup |
851
887
  | `--target URL` | only proxies that reach this site (repeatable) |
852
- | `--recheck [FILE\|live]` | only check proxies from a file, the last run, or the public live list |
888
+ | `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
853
889
  | `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
854
890
  | `--no-geo` | skip the country lookup |
855
891
  | `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
@@ -896,6 +932,25 @@ The repo does part of the work itself:
896
932
 
897
933
  ## FAQ
898
934
 
935
+ <a id="who-runs-free-proxies"></a>
936
+
937
+ <details open>
938
+ <summary><b>Who runs free proxies – and should you use them?</b></summary>
939
+ <br>
940
+
941
+ Almost nobody runs a free proxy for you. What ends up on public lists is usually one of these:
942
+
943
+ - **Misconfigured servers** – a Squid, a router or an app with a proxy port that was meant to stay internal.
944
+ - **Deliberately open proxies** – a few volunteers and research projects, and services that give some away to sell the rest.
945
+ - **Infected machines** – computers and IoT devices whose owners don't know they relay traffic. Many residential exits are like this.
946
+ - **Traps** – honeypots that log what goes through them, and proxies that rewrite pages to inject ads or scripts.
947
+
948
+ proxy-scraper can't tell an infected home router from an open office proxy, but it filters what it can measure: a proxy has to answer two independent requests with the same exit IP (honeypots that only answer scanners drop out), deliver a known page byte for byte (injectors drop out), and HTTPS counts only with a certificate that verifies end to end. Each hit says whether its exit is in a datacenter.
949
+
950
+ Good uses: public data, checking how a site looks from another country, testing your own blocking and rate limits, research. Never send passwords, cookies, payment or personal data through a free proxy, and keep HTTPS certificate checks on. Use them only where you're allowed to.
951
+
952
+ </details>
953
+
899
954
  <details>
900
955
  <summary><b>Almost nothing gets through.</b></summary>
901
956
  <br>
@@ -950,6 +1005,8 @@ Only for things that don't matter. Public proxies are run by strangers who can r
950
1005
 
951
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.
952
1007
 
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.
1009
+
953
1010
  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.
954
1011
 
955
1012
  Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere, daily snapshots, a rotating proxy URL for requests, httpx and Playwright, `--pick` for working proxies without a scan, a proxy pool API compatible with jhao104/proxy_pool, your own lists with `--source`, a GitHub Action, a Telegram bot and an Atom feed for the weekly report.
@@ -1020,6 +1077,14 @@ proxyscraper/
1020
1077
 
1021
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.
1022
1079
 
1080
+ Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
1081
+
1082
+ <a href="https://github.com/maximilianfeix/proxy-scraper/graphs/contributors">
1083
+ <img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
1084
+ </a>
1085
+
1086
+ Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
1087
+
1023
1088
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
1024
1089
  <picture>
1025
1090
  <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
@@ -105,6 +105,7 @@ tests/test_preferences.py
105
105
  tests/test_proxy_pages.py
106
106
  tests/test_proxy_sources.py
107
107
  tests/test_publish.py
108
+ tests/test_recheck_stdin.py
108
109
  tests/test_report.py
109
110
  tests/test_robustness.py
110
111
  tests/test_rotator.py
@@ -1,7 +1,7 @@
1
1
  """proxy-scraper: collects public HTTP/SOCKS4/SOCKS5 proxies from hundreds of sources, checks them
2
2
  in parallel with its own protocol handshakes and learns which sources deliver good proxies."""
3
3
 
4
- __version__ = "1.23.0"
4
+ __version__ = "1.25.0"
5
5
 
6
6
 
7
7
  def __getattr__(name):
@@ -215,7 +215,7 @@ async def live_proxies_async(*, types: Iterable[str] = PROXY_TYPES, countries: I
215
215
  Same filters as find_proxies, plus
216
216
  min_uptime only proxies listed in at least this share (percent) of the week's runs, e.g. 90
217
217
  works_on only proxies that got through to these sites in the last run: google, reddit, amazon, instagram,
218
- tiktok
218
+ tiktok, discord
219
219
  min_speed only proxies that downloaded at least this many KiB/s in the last run
220
220
  limit at most this many (0 = all)
221
221
  """