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.
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/PKG-INFO +64 -30
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/README.md +62 -28
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/PKG-INFO +64 -30
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/SOURCES.txt +6 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/requires.txt +1 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__init__.py +1 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/app.py +30 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/checker.py +3 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/cli.py +3 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/exporters.py +83 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/judges.py +2 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/netio.py +13 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/publish.py +9 -3
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/runsteps.py +2 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/core.py +9 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/http.py +18 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/index.html +1 -1
- proxy_scraper_cli-1.28.0/proxyscraper/sourcepages.py +209 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.py +9 -2
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/targets.py +5 -5
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/pyproject.toml +11 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_app.py +45 -0
- proxy_scraper_cli-1.28.0/tests/test_bad_hosts_and_host_header.py +144 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_exporters.py +50 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mcp_server.py +11 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mine_sources.py +54 -0
- proxy_scraper_cli-1.28.0/tests/test_readme_translations.py +42 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_api.py +24 -1
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_dashboard.py +2 -1
- proxy_scraper_cli-1.28.0/tests/test_source_pages.py +128 -0
- proxy_scraper_cli-1.28.0/tests/test_workflow_pip.py +85 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/LICENSE +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__main__.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/action.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/agent.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/api.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/asndb.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/blocklist.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/charts.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/compat.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/completion.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/fetchcache.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geo.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geodb.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/handshake.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/history.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_entry.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_server.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mirror.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/options.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/output.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pages.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/parsing.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/paths.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pipeline.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/preferences.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/proxypages.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ranking.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/report.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/__init__.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/api.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/dashboard.html +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/pool.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/socks.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/status.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/upstream.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/apple-touch-icon.png +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/logo.png +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/og.png +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sites.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.json +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/speed.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/__init__.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/dashboard.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/keys.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/report.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/serve.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/widgets.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/wizard.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/setup.cfg +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_action.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_agent.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_api.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_asndb.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_auth.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_blocklist.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_charts.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_checker.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_citation.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_colon_logins.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_compat.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_completion.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_discovery_growth.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_fetchcache.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_geodb.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_card.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_parquet.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_judges.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_learning.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_live_api.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_mirror.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_options.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_output_stdout.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_own_sources.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pac.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_packaging.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pages.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing_fuzz.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_paths.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pick.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pipeline.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_preferences.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_pages.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_sources.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_publish.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_pypi_readme.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_recheck_stdin.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_report.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_robustness.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_rotator.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_password.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_refill.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_v2.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server_closed_writer.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_server_fixes.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_sites.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_sources_json.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_speed.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_speed_ranking.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_survival_ranking.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_tamper.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_targets.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_ui.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_uptime.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_wizard.py +0 -0
- {proxy_scraper_cli-1.26.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_permissions.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
49
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
50
|
-
<img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
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
|
[](https://github.com/maximilianfeix/proxy-scraper/actions/workflows/tests.yml)
|
|
@@ -55,18 +55,18 @@ Dynamic: license-file
|
|
|
55
55
|
[](#live-list)
|
|
56
56
|
[](https://pypi.org/project/proxy-scraper-cli/)
|
|
57
57
|
[](https://pepy.tech/projects/proxy-scraper-cli)
|
|
58
|
-
[](https://github.com/maximilianfeix/proxy-scraper/blob/v1.
|
|
58
|
+
[](https://github.com/maximilianfeix/proxy-scraper/blob/v1.28.0/pyproject.toml)
|
|
59
59
|
[](https://github.com/maximilianfeix/proxy-scraper/stargazers)
|
|
60
|
-
[](https://github.com/maximilianfeix/proxy-scraper/blob/v1.
|
|
60
|
+
[](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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
+
[](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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
613
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
614
|
-
<img src="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|