proxy-scraper-cli 1.27.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.27.0 → proxy_scraper_cli-1.28.0}/PKG-INFO +62 -30
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/README.md +60 -28
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/PKG-INFO +62 -30
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/SOURCES.txt +4 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/requires.txt +1 -1
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__init__.py +1 -1
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/app.py +30 -1
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/checker.py +3 -2
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/cli.py +3 -2
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/exporters.py +83 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/judges.py +2 -2
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/netio.py +13 -1
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/publish.py +9 -3
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/runsteps.py +2 -2
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/core.py +9 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/http.py +18 -2
- {proxy_scraper_cli-1.27.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.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.py +9 -2
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/targets.py +5 -5
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/pyproject.toml +11 -1
- {proxy_scraper_cli-1.27.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.27.0 → proxy_scraper_cli-1.28.0}/tests/test_exporters.py +50 -1
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_mcp_server.py +11 -0
- {proxy_scraper_cli-1.27.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.28.0/tests/test_source_pages.py +128 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/LICENSE +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/__main__.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/action.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/agent.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/api.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/asndb.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/blocklist.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/charts.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/compat.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/completion.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/fetchcache.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geo.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/geodb.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/handshake.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/history.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_entry.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mcp_server.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/mirror.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/options.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/output.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pages.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/parsing.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/paths.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/pipeline.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/preferences.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/proxypages.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ranking.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/report.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/__init__.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/api.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/dashboard.html +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/pool.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/socks.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/status.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/server/upstream.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/apple-touch-icon.png +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/logo.png +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/site/og.png +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sites.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/sources.json +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/speed.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/__init__.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/dashboard.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/keys.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/report.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/serve.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/widgets.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/proxyscraper/ui/wizard.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/setup.cfg +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_action.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_agent.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_api.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_asndb.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_auth.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_blocklist.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_charts.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_checker.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_citation.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_colon_logins.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_compat.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_completion.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_discovery_growth.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_fetchcache.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_geodb.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_card.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_hf_parquet.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_judges.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_learning.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_live_api.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_mirror.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_options.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_output_stdout.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_own_sources.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_pac.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_packaging.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_pages.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_parsing_fuzz.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_paths.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_pick.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_pipeline.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_preferences.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_pages.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_proxy_sources.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_publish.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_pypi_readme.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_recheck_stdin.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_report.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_robustness.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_rotator.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_api.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_dashboard.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_password.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_refill.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_serve_v2.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_server.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_server_closed_writer.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_server_fixes.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_sites.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_sources_json.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_speed.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_speed_ranking.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_survival_ranking.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_tamper.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_targets.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_ui.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_uptime.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_wizard.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_permissions.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_pins.py +0 -0
- {proxy_scraper_cli-1.27.0 → proxy_scraper_cli-1.28.0}/tests/test_workflow_pip.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.
|
|
@@ -360,7 +364,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
|
|
|
360
364
|
<td valign="top">
|
|
361
365
|
|
|
362
366
|
**Real verification**<br>
|
|
363
|
-
Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests: over 3.6 million checks, 54 % of the proxies that answered the first request failed the second. A third request catches proxies that **tamper with content**: about one in 40 working proxies changed a known page, usually by injecting a script ([the numbers](https://github.com/maximilianfeix/proxy-scraper/blob/v1.
|
|
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.
|
|
364
368
|
|
|
365
369
|
</td>
|
|
366
370
|
<td valign="top">
|
|
@@ -431,6 +435,8 @@ macOS, Linux and Windows, Python 3.9 to 3.14. Only two dependencies: `rich` and
|
|
|
431
435
|
| API to fetch a proxy (proxy_pool compatible) | ❌ | ✅ [`/get`](#pool-api) |
|
|
432
436
|
| Ready-made list without running anything | ✅ | ✅ [live list](#live-list) |
|
|
433
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
|
+
|
|
434
440
|
<a id="examples"></a>
|
|
435
441
|
|
|
436
442
|
## Examples
|
|
@@ -545,7 +551,7 @@ proxy-scraper --recheck --serve --serve-host 0.0.0.0
|
|
|
545
551
|
curl -x "http://country-de:$PROXY_SCRAPER_SERVE_PASSWORD@your-server:8899" https://api.ipify.org
|
|
546
552
|
```
|
|
547
553
|
|
|
548
|
-
Without a password, `--serve-host` means **anyone who reaches the port can use it**. The ready-made [`compose.yaml`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.
|
|
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`.
|
|
549
555
|
|
|
550
556
|
| Option | What it does |
|
|
551
557
|
|---|---|
|
|
@@ -566,7 +572,7 @@ In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In th
|
|
|
566
572
|
|
|
567
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.
|
|
568
574
|
|
|
569
|
-
<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>
|
|
570
576
|
|
|
571
577
|
<a id="pool-api"></a>
|
|
572
578
|
|
|
@@ -604,16 +610,16 @@ requests.get("https://example.com", proxies={"http": proxy, "https": proxy})
|
|
|
604
610
|
|
|
605
611
|
## Discord and Telegram bot
|
|
606
612
|
|
|
607
|
-
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).
|
|
608
614
|
|
|
609
615
|
<a id="how-it-works"></a>
|
|
610
616
|
|
|
611
617
|
## How it works
|
|
612
618
|
|
|
613
619
|
<picture>
|
|
614
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
615
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/v1.
|
|
616
|
-
<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%">
|
|
617
623
|
</picture>
|
|
618
624
|
|
|
619
625
|
|
|
@@ -628,7 +634,7 @@ flowchart LR
|
|
|
628
634
|
G -. next run .-> C
|
|
629
635
|
```
|
|
630
636
|
|
|
631
|
-
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.
|
|
632
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.
|
|
633
639
|
3. **Prioritize** – known working proxies first, then by the learned hit rate of their sources.
|
|
634
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.
|
|
@@ -640,9 +646,9 @@ flowchart LR
|
|
|
640
646
|
<summary><b>📸 See the live dashboard and final report</b></summary>
|
|
641
647
|
<br>
|
|
642
648
|
<div align="center">
|
|
643
|
-
<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">
|
|
644
650
|
<br><br>
|
|
645
|
-
<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">
|
|
646
652
|
</div>
|
|
647
653
|
</details>
|
|
648
654
|
|
|
@@ -653,7 +659,7 @@ proxy-scraper --source https://example.com/my-list.txt --source socks5=./socks.t
|
|
|
653
659
|
proxy-scraper --only-sources --source bought.txt --want 50 # only yours
|
|
654
660
|
```
|
|
655
661
|
|
|
656
|
-
Any text with `ip:port` works; lines like `socks5://user:pass@host:port` keep their type, bare ones are tried as HTTP and SOCKS5 unless you write `http=…`. For logins written the way many paid lists export them, `ip:port:user:pass`, use `--recheck bought.txt` or pipe the list into `--recheck -` – sources leave that form alone, since lists like `ip:port:US:elite` look the same.
|
|
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.
|
|
657
663
|
|
|
658
664
|
<a id="output"></a>
|
|
659
665
|
|
|
@@ -784,6 +790,25 @@ if __name__ == "__main__":
|
|
|
784
790
|
|
|
785
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.
|
|
786
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
|
+
|
|
787
812
|
**proxychains, Clash / Mihomo, sing-box** – ready-made configs with `--export`
|
|
788
813
|
|
|
789
814
|
```bash
|
|
@@ -795,6 +820,8 @@ proxychains4 -f results/latest/proxychains.conf curl https://api.ipify.org
|
|
|
795
820
|
|
|
796
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`.
|
|
797
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
|
+
|
|
798
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:
|
|
799
826
|
|
|
800
827
|
| Tool | Where | Set |
|
|
@@ -829,6 +856,8 @@ pip download requests # git, pip, npm & co. now go through the pool
|
|
|
829
856
|
|
|
830
857
|
**In a GitHub workflow** – the action picks working proxies for the next steps
|
|
831
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
|
+
|
|
832
861
|
```yaml
|
|
833
862
|
- id: proxies
|
|
834
863
|
uses: maximilianfeix/proxy-scraper@v1
|
|
@@ -891,7 +920,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
891
920
|
| `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
|
|
892
921
|
| `--no-dnsbl` | skip the blocklist lookup |
|
|
893
922
|
| `--target URL` | only proxies that reach this site (repeatable) |
|
|
894
|
-
| `--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 |
|
|
895
924
|
| `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
|
|
896
925
|
| `--no-geo` | skip the country lookup |
|
|
897
926
|
| `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
|
|
@@ -906,7 +935,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
906
935
|
| `--serve-refill HOURS` | while serving, check fresh proxies every HOURS and add the hits to the pool |
|
|
907
936
|
| `--serve [PORT]` | afterwards serve as a rotating proxy on `127.0.0.1:PORT` (default: 8899) |
|
|
908
937
|
| `-o FILE` | also write all hits to this file; `-o -` prints them to stdout |
|
|
909
|
-
| `--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` |
|
|
910
939
|
| `-V`, `--version` | print the version |
|
|
911
940
|
| `--completion SHELL` | print the tab completion script for bash, zsh, fish or PowerShell |
|
|
912
941
|
|
|
@@ -1029,7 +1058,7 @@ Shipped in [v1.5](https://github.com/maximilianfeix/proxy-scraper/milestone/5):
|
|
|
1029
1058
|
|
|
1030
1059
|
## Contributing
|
|
1031
1060
|
|
|
1032
|
-
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:
|
|
1033
1062
|
|
|
1034
1063
|
```bash
|
|
1035
1064
|
pip install -e ".[dev]"
|
|
@@ -1062,12 +1091,13 @@ proxyscraper/
|
|
|
1062
1091
|
├── geodb.py DB-IP country database (monthly, binary search)
|
|
1063
1092
|
├── targets.py target sites for --target
|
|
1064
1093
|
├── output.py result files
|
|
1065
|
-
├── exporters.py proxychains, Clash, sing-box, curl and
|
|
1094
|
+
├── exporters.py proxychains, Clash, sing-box, curl, PAC and Proxifier formats (--export)
|
|
1066
1095
|
├── server/ rotating proxy server (--serve): pool · http · upstream · socks · status · api · core
|
|
1067
1096
|
├── api.py find_proxies() / check_proxies() for Python
|
|
1068
1097
|
├── agent.py MCP tools without the SDK: live list, filters, fetch through proxies
|
|
1069
1098
|
├── mcp_server.py MCP server (proxy-scraper-mcp) for AI agents
|
|
1070
1099
|
├── publish.py live list for GitHub Actions
|
|
1100
|
+
├── sourcepages.py the ranking of the sources on the website
|
|
1071
1101
|
├── mirror.py the same lists in their own repo (free-proxy-list)
|
|
1072
1102
|
├── paths.py where state and results are stored
|
|
1073
1103
|
├── compat.py differences between Unix and Windows
|
|
@@ -1091,6 +1121,8 @@ Thanks to everyone who helped build it – new sources, countries, Python 3.14,
|
|
|
1091
1121
|
|
|
1092
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.
|
|
1093
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
|
+
|
|
1094
1126
|
<a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
|
|
1095
1127
|
<picture>
|
|
1096
1128
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
|
|
@@ -1103,7 +1135,7 @@ Want to join? [Beginner-friendly issues](https://github.com/maximilianfeix/proxy
|
|
|
1103
1135
|
|
|
1104
1136
|
## Acknowledgements
|
|
1105
1137
|
|
|
1106
|
-
proxy-scraper stands on the work of the people who publish free proxy lists. Thanks to everyone listed in [`sources.json`](https://github.com/maximilianfeix/proxy-scraper/blob/v1.
|
|
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
|
|
1107
1139
|
|
|
1108
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
|
|
1109
1141
|
- [Textualize/rich](https://github.com/Textualize/rich), which draws the whole terminal UI
|
|
@@ -1118,7 +1150,7 @@ This tool only collects publicly listed proxies and checks whether they work. Yo
|
|
|
1118
1150
|
|
|
1119
1151
|
---
|
|
1120
1152
|
|
|
1121
|
-
<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>
|
|
1122
1154
|
|
|
1123
1155
|
<sub>If proxy-scraper saves you time, a ⭐ helps others find it.</sub>
|
|
1124
1156
|
|