proxy-scraper-cli 1.26.0__tar.gz → 1.28.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 (143) hide show
  1. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/PKG-INFO +64 -30
  2. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/README.md +62 -28
  3. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/PKG-INFO +64 -30
  4. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/SOURCES.txt +6 -1
  5. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/requires.txt +1 -1
  6. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__init__.py +1 -1
  7. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/app.py +30 -1
  8. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/checker.py +3 -2
  9. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/cli.py +3 -2
  10. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/exporters.py +83 -0
  11. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/judges.py +2 -2
  12. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/netio.py +13 -1
  13. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/publish.py +9 -3
  14. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/runsteps.py +2 -2
  15. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/core.py +9 -0
  16. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/http.py +18 -2
  17. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/index.html +1 -1
  18. proxy_scraper_cli-1.28.0/proxyscraper/sourcepages.py +209 -0
  19. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.py +9 -2
  20. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/targets.py +5 -5
  21. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/pyproject.toml +11 -1
  22. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_app.py +45 -0
  23. proxy_scraper_cli-1.28.0/tests/test_bad_hosts_and_host_header.py +144 -0
  24. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_exporters.py +50 -1
  25. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mcp_server.py +11 -0
  26. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mine_sources.py +54 -0
  27. proxy_scraper_cli-1.28.0/tests/test_readme_translations.py +42 -0
  28. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_api.py +24 -1
  29. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_dashboard.py +2 -1
  30. proxy_scraper_cli-1.28.0/tests/test_source_pages.py +128 -0
  31. proxy_scraper_cli-1.28.0/tests/test_workflow_pip.py +85 -0
  32. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/LICENSE +0 -0
  33. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
  34. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
  35. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
  36. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__main__.py +0 -0
  37. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/action.py +0 -0
  38. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/agent.py +0 -0
  39. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/api.py +0 -0
  40. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/asndb.py +0 -0
  41. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/blocklist.py +0 -0
  42. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/charts.py +0 -0
  43. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/compat.py +0 -0
  44. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/completion.py +0 -0
  45. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/fetchcache.py +0 -0
  46. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geo.py +0 -0
  47. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geodb.py +0 -0
  48. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/handshake.py +0 -0
  49. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/history.py +0 -0
  50. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_entry.py +0 -0
  51. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_server.py +0 -0
  52. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mirror.py +0 -0
  53. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/options.py +0 -0
  54. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/output.py +0 -0
  55. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pages.py +0 -0
  56. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/parsing.py +0 -0
  57. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/paths.py +0 -0
  58. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pipeline.py +0 -0
  59. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/preferences.py +0 -0
  60. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/proxypages.py +0 -0
  61. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ranking.py +0 -0
  62. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/report.py +0 -0
  63. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/__init__.py +0 -0
  64. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/api.py +0 -0
  65. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/dashboard.html +0 -0
  66. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/pool.py +0 -0
  67. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/socks.py +0 -0
  68. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/status.py +0 -0
  69. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/upstream.py +0 -0
  70. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/apple-touch-icon.png +0 -0
  71. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
  72. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/logo.png +0 -0
  73. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/og.png +0 -0
  74. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sites.py +0 -0
  75. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.json +0 -0
  76. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/speed.py +0 -0
  77. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/__init__.py +0 -0
  78. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/dashboard.py +0 -0
  79. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/keys.py +0 -0
  80. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/report.py +0 -0
  81. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/serve.py +0 -0
  82. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/widgets.py +0 -0
  83. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/wizard.py +0 -0
  84. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/setup.cfg +0 -0
  85. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_action.py +0 -0
  86. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_agent.py +0 -0
  87. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_api.py +0 -0
  88. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_asndb.py +0 -0
  89. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_auth.py +0 -0
  90. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_blocklist.py +0 -0
  91. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_charts.py +0 -0
  92. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_checker.py +0 -0
  93. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_citation.py +0 -0
  94. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_colon_logins.py +0 -0
  95. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_compat.py +0 -0
  96. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_completion.py +0 -0
  97. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_discovery_growth.py +0 -0
  98. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_fetchcache.py +0 -0
  99. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_geodb.py +0 -0
  100. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_card.py +0 -0
  101. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_parquet.py +0 -0
  102. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_judges.py +0 -0
  103. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_learning.py +0 -0
  104. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_live_api.py +0 -0
  105. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mirror.py +0 -0
  106. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_options.py +0 -0
  107. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_output_stdout.py +0 -0
  108. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_own_sources.py +0 -0
  109. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pac.py +0 -0
  110. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_packaging.py +0 -0
  111. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pages.py +0 -0
  112. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing.py +0 -0
  113. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing_fuzz.py +0 -0
  114. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_paths.py +0 -0
  115. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pick.py +0 -0
  116. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pipeline.py +0 -0
  117. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_preferences.py +0 -0
  118. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_pages.py +0 -0
  119. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_sources.py +0 -0
  120. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_publish.py +0 -0
  121. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pypi_readme.py +0 -0
  122. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_recheck_stdin.py +0 -0
  123. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_report.py +0 -0
  124. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_robustness.py +0 -0
  125. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_rotator.py +0 -0
  126. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_password.py +0 -0
  127. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_refill.py +0 -0
  128. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_v2.py +0 -0
  129. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server.py +0 -0
  130. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server_closed_writer.py +0 -0
  131. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server_fixes.py +0 -0
  132. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_sites.py +0 -0
  133. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_sources_json.py +0 -0
  134. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_speed.py +0 -0
  135. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_speed_ranking.py +0 -0
  136. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_survival_ranking.py +0 -0
  137. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_tamper.py +0 -0
  138. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_targets.py +0 -0
  139. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_ui.py +0 -0
  140. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_uptime.py +0 -0
  141. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_wizard.py +0 -0
  142. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_permissions.py +0 -0
  143. {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_pins.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proxy-scraper-cli
3
- Version: 1.26.0
3
+ Version: 1.28.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
@@ -39,15 +39,15 @@ Requires-Dist: pytest; extra == "dev"
39
39
  Requires-Dist: hypothesis; extra == "dev"
40
40
  Requires-Dist: pyyaml; extra == "dev"
41
41
  Requires-Dist: markdown-it-py; extra == "dev"
42
- Requires-Dist: ruff==0.16.9; extra == "dev"
42
+ Requires-Dist: ruff==0.16.10; extra == "dev"
43
43
  Dynamic: license-file
44
44
 
45
45
  <div align="center">
46
46
 
47
47
  <picture>
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%">
48
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/banner-dark.svg">
49
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/banner-light.svg">
50
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/banner-dark.svg" alt="proxy-scraper – free proxies that actually work" width="100%">
51
51
  </picture>
52
52
 
53
53
  [![tests](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml/badge.svg)](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml)
@@ -55,18 +55,18 @@ Dynamic: license-file
55
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)
56
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/)
57
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)
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)
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.28.0/pyproject.toml)
59
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)
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)
60
+ [![License](https://img.shields.io/badge/license-MIT-D4F77A?style=flat-square&labelColor=121113)](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/LICENSE)
61
61
 
62
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>
63
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>
64
64
  <a href="#install"><img src="https://img.shields.io/badge/Install-121113?style=for-the-badge" alt="Install"></a>
65
65
  <a href="#from-python"><img src="https://img.shields.io/badge/Python_API-121113?style=for-the-badge" alt="Python API"></a>
66
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>
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>
67
+ <a href="https://github.com/maximilianfeix/proxy-scraper/tree/v1.28.0/bot/"><img src="https://img.shields.io/badge/Discord_bot-121113?style=for-the-badge" alt="Discord bot"></a>
68
68
 
69
- **English** · [简体中文](https://github.com/maximilianfeix/proxy-scraper/blob/v1.26.0/README.zh-CN.md)
69
+ **English** · [简体中文](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.zh-CN.md) · [Español](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.es.md) · [Deutsch](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.de.md) · [Русский](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.ru.md) · [Português (Brasil)](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.pt-BR.md) · [Français](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/README.fr.md)
70
70
 
71
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)
72
72
 
@@ -76,7 +76,7 @@ Dynamic: license-file
76
76
 
77
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.
78
78
 
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)
79
+ **In numbers:** in one day it ran 3.6 million checks on free proxies – 1.1 % passed, 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.28.0/docs/free-proxies-in-numbers.md)
80
80
 
81
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).
82
82
 
@@ -91,8 +91,10 @@ curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
91
91
 
92
92
  `uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
93
93
 
94
+ **Only want proxies?** The lists, rebuilt every hour, best first: [all.txt](https://maximilianfeix.github.io/proxy-scraper/all.txt) · [http.txt](https://maximilianfeix.github.io/proxy-scraper/http.txt) · [socks4.txt](https://maximilianfeix.github.io/proxy-scraper/socks4.txt) · [socks5.txt](https://maximilianfeix.github.io/proxy-scraper/socks5.txt) · [proxies.json](https://maximilianfeix.github.io/proxy-scraper/proxies.json) · [by country](https://maximilianfeix.github.io/proxy-scraper/) · [more formats](#live-list)
95
+
94
96
  <div align="center">
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">
97
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
96
98
  </div>
97
99
 
98
100
  > **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)
@@ -181,7 +183,7 @@ Installed, the learned state lives in your user data folder (`~/Library/Applicat
181
183
  Started without arguments, a wizard asks what you are looking for:
182
184
 
183
185
  <div align="center">
184
- <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/wizard.svg" alt="Setup wizard" width="760">
186
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/wizard.svg" alt="Setup wizard" width="760">
185
187
  </div>
186
188
 
187
189
  | Preset | What it does |
@@ -216,7 +218,7 @@ Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and pub
216
218
 
217
219
  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`).
218
220
 
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>
221
+ <div align="center"><a href="https://maximilianfeix.github.io/proxy-scraper/"><img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/website.png" alt="The live list website" width="860"></a></div>
220
222
 
221
223
  <div align="center">
222
224
 
@@ -248,6 +250,8 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
248
250
  curl -s https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt | head
249
251
  ```
250
252
 
253
+ **Where they come from:** [which free proxy lists actually work](https://maximilianfeix.github.io/proxy-scraper/sources/) ranks all 700+ sources every hour – how many proxies each one lists, how many passed every check and the share. The same as data: [sources.json](https://maximilianfeix.github.io/proxy-scraper/sources.json).
254
+
251
255
  **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.
252
256
 
253
257
  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.
@@ -262,6 +266,8 @@ Or let the tool start from it: `proxy-scraper --recheck live` downloads the list
262
266
 
263
267
  `proxy-scraper-mcp` is an [MCP](https://modelcontextprotocol.io) server: Claude Code, Claude Desktop, Cursor, VS Code, Codex and any other MCP client can ask for working proxies and load pages through them.
264
268
 
269
+ [![proxy-scraper MCP server on Glama](https://glama.ai/mcp/servers/maximilianfeix/proxy-scraper/badges/score.svg)](https://glama.ai/mcp/servers/maximilianfeix/proxy-scraper)
270
+
265
271
  | Tool | What it does |
266
272
  |---|---|
267
273
  | `get_proxies` | working proxies right now, from the hourly list – filter by protocol, country, HTTPS, elite, no datacenter, not blocklisted, stable, uptime, latency, gets through to Google/Reddit/Amazon |
@@ -358,7 +364,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
358
364
  <td valign="top">
359
365
 
360
366
  **Real verification**<br>
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.
367
+ 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.28.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.
362
368
 
363
369
  </td>
364
370
  <td valign="top">
@@ -429,6 +435,8 @@ macOS, Linux and Windows, Python 3.9 to 3.14. Only two dependencies: `rich` and
429
435
  | API to fetch a proxy (proxy_pool compatible) | ❌ | ✅ [`/get`](#pool-api) |
430
436
  | Ready-made list without running anything | ✅ | ✅ [live list](#live-list) |
431
437
 
438
+ Named and dated: [how it compares to proxifly, TheSpeedX, monosans and clarketm](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/docs/comparison.md).
439
+
432
440
  <a id="examples"></a>
433
441
 
434
442
  ## Examples
@@ -543,7 +551,7 @@ proxy-scraper --recheck --serve --serve-host 0.0.0.0
543
551
  curl -x "http://country-de:$PROXY_SCRAPER_SERVE_PASSWORD@your-server:8899" https://api.ipify.org
544
552
  ```
545
553
 
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`.
554
+ 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.28.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`.
547
555
 
548
556
  | Option | What it does |
549
557
  |---|---|
@@ -564,7 +572,7 @@ In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In th
564
572
 
565
573
  **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.
566
574
 
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>
575
+ <div align="center"><img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.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>
568
576
 
569
577
  <a id="pool-api"></a>
570
578
 
@@ -602,16 +610,16 @@ requests.get("https://example.com", proxies={"http": proxy, "https": proxy})
602
610
 
603
611
  ## Discord and Telegram bot
604
612
 
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).
613
+ The live list can also come to you: [`bot/`](https://github.com/maximilianfeix/proxy-scraper/tree/v1.28.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.28.0/bot/README.md).
606
614
 
607
615
  <a id="how-it-works"></a>
608
616
 
609
617
  ## How it works
610
618
 
611
619
  <picture>
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%">
620
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/checks-dark.svg">
621
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/checks-light.svg">
622
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.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%">
615
623
  </picture>
616
624
 
617
625
 
@@ -626,7 +634,7 @@ flowchart LR
626
634
  G -. next run .-> C
627
635
  ```
628
636
 
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.
637
+ 1. **Sources** – the curated list in [`sources.json`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.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.
630
638
  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.
631
639
  3. **Prioritize** – known working proxies first, then by the learned hit rate of their sources.
632
640
  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.
@@ -638,9 +646,9 @@ flowchart LR
638
646
  <summary><b>📸 See the live dashboard and final report</b></summary>
639
647
  <br>
640
648
  <div align="center">
641
- <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/dashboard.svg" alt="Live dashboard while checking" width="860">
649
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/dashboard.svg" alt="Live dashboard while checking" width="860">
642
650
  <br><br>
643
- <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.26.0/docs/summary.svg" alt="Final report after a run" width="860">
651
+ <img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.28.0/docs/summary.svg" alt="Final report after a run" width="860">
644
652
  </div>
645
653
  </details>
646
654
 
@@ -651,7 +659,7 @@ proxy-scraper --source https://example.com/my-list.txt --source socks5=./socks.t
651
659
  proxy-scraper --only-sources --source bought.txt --want 50 # only yours
652
660
  ```
653
661
 
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.
662
+ 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`, `--recheck https://example.com/proxies.txt` for a list on the web, or pipe the list into `--recheck -` – sources leave that form alone, since lists like `ip:port:US:elite` look the same.
655
663
 
656
664
  <a id="output"></a>
657
665
 
@@ -782,6 +790,25 @@ if __name__ == "__main__":
782
790
 
783
791
  In a Scrapy project, put `RotatingProxy` in `middlewares.py` and add it to `DOWNLOADER_MIDDLEWARES` in `settings.py`. For long crawls, reload the pool now and then – the list changes every hour.
784
792
 
793
+ **Selenium** – Chrome and Firefox can't send a proxy login, so point them at the local rotating server instead: every page load goes out through another checked proxy, and dead ones are skipped for you
794
+
795
+ ```bash
796
+ proxy-scraper --recheck live --serve --https-only # 127.0.0.1:8899, ready in about 30 s
797
+ ```
798
+
799
+ ```python
800
+ from selenium import webdriver
801
+
802
+ options = webdriver.ChromeOptions()
803
+ options.add_argument("--proxy-server=http://127.0.0.1:8899")
804
+ driver = webdriver.Chrome(options=options)
805
+ driver.get("https://api.ipify.org")
806
+ print(driver.find_element("tag name", "body").text) # a different IP on each start
807
+ driver.quit()
808
+ ```
809
+
810
+ Firefox takes the proxy as preferences: `options = webdriver.FirefoxOptions()`, then `options.set_preference("network.proxy.type", 1)`, `"network.proxy.http"` / `"network.proxy.ssl"` to `"127.0.0.1"` and `"network.proxy.http_port"` / `"network.proxy.ssl_port"` to `8899`. Keep the server without `--serve-host`, so only your own machine can use it, and start it with `--https-only` when the pages are `https://` – then only proxies that passed the HTTPS test with verified TLS serve them. One browser session keeps its connections, so for a new IP per page use `session-NAME` in the proxy login (not possible in Selenium) or restart the driver.
811
+
785
812
  **proxychains, Clash / Mihomo, sing-box** – ready-made configs with `--export`
786
813
 
787
814
  ```bash
@@ -793,6 +820,8 @@ proxychains4 -f results/latest/proxychains.conf curl https://api.ipify.org
793
820
 
794
821
  **Browsers and the OS** – `--export pac` writes `proxy.pac`: point Firefox, Chrome (via the system settings), FoxyProxy or macOS/Windows proxy settings at it and every request goes through the best 30 HTTP and SOCKS5 proxies in order, the browser moving on by itself when one fails. Local names and private IP addresses stay direct (a host name like `10.example.com` doesn't count as private). The file itself has no `DIRECT` fallback and resolves no host names, and SOCKS4 is left out because it would make the browser resolve names with your own DNS. Two Firefox settings matter: turn on *Proxy DNS when using SOCKS v5*, and set `network.proxy.failover_direct` to `false` in `about:config` – otherwise Firefox goes direct once every proxy has failed. No install at all: the live list publishes one every hour at `https://maximilianfeix.github.io/proxy-scraper/proxy.pac`.
795
822
 
823
+ **Proxifier** (Windows, macOS) sends *any* program through a proxy, even ones without proxy settings. `--export proxifier` writes `proxifier.ppx`: import it via *File → Import Profile*, and every connection goes through a redundancy chain of the best 50 proxies – Proxifier tries them in order and takes the first that answers. `localhost` stays direct. HTTP proxies are included only when they can tunnel (`CONNECT`), SOCKS4 only without a login. Needs Proxifier 4; add `--https-only` for proxies that passed the HTTPS test.
824
+
796
825
  **Burp Suite, OWASP ZAP, mitmproxy** – put the rotating server behind your intercepting proxy, so a scan or a brute-force test comes from many IPs while you still see every request. Start it with `proxy-scraper --recheck live --serve`, then:
797
826
 
798
827
  | Tool | Where | Set |
@@ -827,6 +856,8 @@ pip download requests # git, pip, npm & co. now go through the pool
827
856
 
828
857
  **In a GitHub workflow** – the action picks working proxies for the next steps
829
858
 
859
+ [Marketplace](https://github.com/marketplace/actions/proxy-scraper-free-working-proxies) · [Complete workflow, inputs and outputs](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/docs/github-action.md)
860
+
830
861
  ```yaml
831
862
  - id: proxies
832
863
  uses: maximilianfeix/proxy-scraper@v1
@@ -889,7 +920,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
889
920
  | `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
890
921
  | `--no-dnsbl` | skip the blocklist lookup |
891
922
  | `--target URL` | only proxies that reach this site (repeatable) |
892
- | `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
923
+ | `--recheck [FILE\|URL\|-\|live]` | only check proxies from a file, a URL, stdin (`-`), the last run, or the public live list |
893
924
  | `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
894
925
  | `--no-geo` | skip the country lookup |
895
926
  | `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
@@ -904,7 +935,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
904
935
  | `--serve-refill HOURS` | while serving, check fresh proxies every HOURS and add the hits to the pool |
905
936
  | `--serve [PORT]` | afterwards serve as a rotating proxy on `127.0.0.1:PORT` (default: 8899) |
906
937
  | `-o FILE` | also write all hits to this file; `-o -` prints them to stdout |
907
- | `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl`, `pac` or `all` |
938
+ | `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl`, `pac`, `proxifier` or `all` |
908
939
  | `-V`, `--version` | print the version |
909
940
  | `--completion SHELL` | print the tab completion script for bash, zsh, fish or PowerShell |
910
941
 
@@ -1027,7 +1058,7 @@ Shipped in [v1.5](https://github.com/maximilianfeix/proxy-scraper/milestone/5):
1027
1058
 
1028
1059
  ## Contributing
1029
1060
 
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:
1061
+ Bug reports, new sources and pull requests are very welcome – see [CONTRIBUTING.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/CONTRIBUTING.md), and [docs/ARCHITECTURE.md](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/docs/ARCHITECTURE.md) for how the pieces fit together. The short version:
1031
1062
 
1032
1063
  ```bash
1033
1064
  pip install -e ".[dev]"
@@ -1060,12 +1091,13 @@ proxyscraper/
1060
1091
  ├── geodb.py DB-IP country database (monthly, binary search)
1061
1092
  ├── targets.py target sites for --target
1062
1093
  ├── output.py result files
1063
- ├── exporters.py proxychains, Clash, sing-box, curl and PAC formats (--export)
1094
+ ├── exporters.py proxychains, Clash, sing-box, curl, PAC and Proxifier formats (--export)
1064
1095
  ├── server/ rotating proxy server (--serve): pool · http · upstream · socks · status · api · core
1065
1096
  ├── api.py find_proxies() / check_proxies() for Python
1066
1097
  ├── agent.py MCP tools without the SDK: live list, filters, fetch through proxies
1067
1098
  ├── mcp_server.py MCP server (proxy-scraper-mcp) for AI agents
1068
1099
  ├── publish.py live list for GitHub Actions
1100
+ ├── sourcepages.py the ranking of the sources on the website
1069
1101
  ├── mirror.py the same lists in their own repo (free-proxy-list)
1070
1102
  ├── paths.py where state and results are stored
1071
1103
  ├── compat.py differences between Unix and Windows
@@ -1089,6 +1121,8 @@ Thanks to everyone who helped build it – new sources, countries, Python 3.14,
1089
1121
 
1090
1122
  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.
1091
1123
 
1124
+ From the same author: [dejabuilt](https://github.com/maximilianfeix/dejabuilt), an agent skill that checks GitHub before you build – it tells you whether a project idea already exists, with the numbers.
1125
+
1092
1126
  <a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
1093
1127
  <picture>
1094
1128
  <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
@@ -1101,7 +1135,7 @@ Want to join? [Beginner-friendly issues](https://github.com/maximilianfeix/proxy
1101
1135
 
1102
1136
  ## Acknowledgements
1103
1137
 
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
1138
+ 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.28.0/proxyscraper/sources.json), and especially to
1105
1139
 
1106
1140
  - [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
1107
1141
  - [Textualize/rich](https://github.com/Textualize/rich), which draws the whole terminal UI
@@ -1116,7 +1150,7 @@ This tool only collects publicly listed proxies and checks whether they work. Yo
1116
1150
 
1117
1151
  ---
1118
1152
 
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>
1153
+ <sub>Made in Germany by <a href="https://github.com/maximilianfeix">@maximilianfeix</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/LICENSE">MIT License</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/CHANGELOG.md">Changelog</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/SECURITY.md">Security</a> · <a href="https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/CONTRIBUTING.md">Contributing</a></sub>
1120
1154
 
1121
1155
  <sub>If proxy-scraper saves you time, a ⭐ helps others find it.</sub>
1122
1156