proxy-scraper-cli 1.22.0__tar.gz → 1.24.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.22.0 → proxy_scraper_cli-1.24.0}/PKG-INFO +102 -20
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/README.md +99 -18
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/PKG-INFO +102 -20
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/SOURCES.txt +7 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/requires.txt +1 -1
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/__init__.py +1 -1
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/agent.py +2 -2
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/api.py +9 -7
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/app.py +99 -6
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/cli.py +1 -1
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/exporters.py +48 -0
- proxy_scraper_cli-1.24.0/proxyscraper/mirror.py +348 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/pages.py +19 -14
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/parsing.py +5 -4
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/publish.py +11 -3
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ranking.py +26 -2
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/core.py +17 -7
- proxy_scraper_cli-1.24.0/proxyscraper/server/dashboard.html +351 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/status.py +59 -4
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/site/index.html +6 -6
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/sites.py +3 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/sources.json +1 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/serve.py +5 -4
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/widgets.py +6 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/pyproject.toml +3 -2
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_agent.py +5 -4
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_live_api.py +6 -5
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_mcp_server.py +2 -1
- proxy_scraper_cli-1.24.0/tests/test_mirror.py +75 -0
- proxy_scraper_cli-1.24.0/tests/test_pac.py +116 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_pick.py +2 -2
- proxy_scraper_cli-1.24.0/tests/test_recheck_stdin.py +263 -0
- proxy_scraper_cli-1.24.0/tests/test_serve_dashboard.py +234 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_sites.py +22 -5
- proxy_scraper_cli-1.24.0/tests/test_survival_ranking.py +58 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/LICENSE +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/dependency_links.txt +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/entry_points.txt +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxy_scraper_cli.egg-info/top_level.txt +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/__main__.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/action.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/asndb.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/blocklist.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/charts.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/checker.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/compat.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/completion.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/fetchcache.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/geo.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/geodb.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/handshake.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/history.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/judges.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/mcp_entry.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/mcp_server.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/netio.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/options.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/output.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/paths.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/pipeline.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/preferences.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/proxypages.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/report.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/runsteps.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/__init__.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/api.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/http.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/pool.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/socks.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/server/upstream.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/site/apple-touch-icon.png +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/site/googleaac1161b7853c5b5.html +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/site/logo.png +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/site/og.png +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/sources.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/speed.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/targets.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/__init__.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/dashboard.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/keys.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/report.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/proxyscraper/ui/wizard.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/setup.cfg +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_action.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_api.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_app.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_asndb.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_auth.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_blocklist.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_charts.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_checker.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_compat.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_completion.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_discovery_growth.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_exporters.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_fetchcache.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_geodb.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_judges.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_learning.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_mine_sources.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_options.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_output_stdout.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_own_sources.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_packaging.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_pages.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_parsing.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_parsing_fuzz.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_paths.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_pipeline.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_preferences.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_proxy_pages.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_proxy_sources.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_publish.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_report.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_robustness.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_rotator.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_serve_api.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_serve_password.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_serve_refill.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_serve_v2.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_server.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_server_closed_writer.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_server_fixes.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_sources_json.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_speed.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_speed_ranking.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_tamper.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_targets.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_ui.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_uptime.py +0 -0
- {proxy_scraper_cli-1.22.0 → proxy_scraper_cli-1.24.0}/tests/test_wizard.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proxy-scraper-cli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.24.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
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.11
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
26
|
Classifier: Topic :: Internet :: Proxy Servers
|
|
26
27
|
Classifier: Topic :: System :: Networking
|
|
27
28
|
Requires-Python: >=3.9
|
|
@@ -36,7 +37,7 @@ Requires-Dist: mcp<3,>=2.2; python_version >= "3.10" and extra == "mcp"
|
|
|
36
37
|
Provides-Extra: dev
|
|
37
38
|
Requires-Dist: pytest; extra == "dev"
|
|
38
39
|
Requires-Dist: hypothesis; extra == "dev"
|
|
39
|
-
Requires-Dist: ruff==0.16.
|
|
40
|
+
Requires-Dist: ruff==0.16.9; extra == "dev"
|
|
40
41
|
Dynamic: license-file
|
|
41
42
|
|
|
42
43
|
<div align="center">
|
|
@@ -51,16 +52,19 @@ Dynamic: license-file
|
|
|
51
52
|
[](https://github.com/maximilianfeix/proxy-scraper/releases/latest)
|
|
52
53
|
[](#live-list)
|
|
53
54
|
[](https://pypi.org/project/proxy-scraper-cli/)
|
|
54
|
-
[](pyproject.toml)
|
|
55
56
|
[](https://github.com/maximilianfeix/proxy-scraper/stargazers)
|
|
56
57
|
[](LICENSE)
|
|
57
58
|
|
|
58
59
|
<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>
|
|
60
|
+
<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>
|
|
59
61
|
<a href="#install"><img src="https://img.shields.io/badge/Install-121113?style=for-the-badge" alt="Install"></a>
|
|
60
62
|
<a href="#from-python"><img src="https://img.shields.io/badge/Python_API-121113?style=for-the-badge" alt="Python API"></a>
|
|
61
63
|
<a href="#mcp"><img src="https://img.shields.io/badge/MCP_server-121113?style=for-the-badge" alt="MCP server for AI agents"></a>
|
|
62
64
|
<a href="bot/"><img src="https://img.shields.io/badge/Discord_bot-121113?style=for-the-badge" alt="Discord bot"></a>
|
|
63
65
|
|
|
66
|
+
**English** · [简体中文](README.zh-CN.md)
|
|
67
|
+
|
|
64
68
|
[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)
|
|
65
69
|
|
|
66
70
|
</div>
|
|
@@ -71,16 +75,23 @@ Most free proxy lists are 95 % dead, and a good part of the rest are honeypots o
|
|
|
71
75
|
|
|
72
76
|
**In numbers:** in one day it checked 3.6 million free proxies – 1.1 % worked, and more than half of the ones that answered failed a second request. [What's actually out there →](docs/free-proxies-in-numbers.md)
|
|
73
77
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
**Try it – no install, about five seconds:**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uvx proxy-scraper-cli --pick 5 --types socks5 # 5 checked proxies
|
|
82
|
+
|
|
83
|
+
# or just the plain list
|
|
84
|
+
curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
|
|
79
88
|
|
|
80
89
|
<div align="center">
|
|
81
|
-
<img src="docs/demo.svg" alt="Animated demo:
|
|
90
|
+
<img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
|
|
82
91
|
</div>
|
|
83
92
|
|
|
93
|
+
> **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)
|
|
94
|
+
|
|
84
95
|
<details>
|
|
85
96
|
<summary><b>Table of contents</b></summary>
|
|
86
97
|
|
|
@@ -114,6 +125,14 @@ proxy-scraper
|
|
|
114
125
|
|
|
115
126
|
The package is called `proxy-scraper-cli` on PyPI (the plain name is taken), the command is `proxy-scraper`.
|
|
116
127
|
|
|
128
|
+
**With [Homebrew](https://brew.sh)** on macOS and Linux:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
brew install maximilianfeix/tap/proxy-scraper
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The formula follows each release within about a day.
|
|
135
|
+
|
|
117
136
|
<details>
|
|
118
137
|
<summary><b>Other ways: Docker, pip, a faster event loop, or straight from the repo</b></summary>
|
|
119
138
|
<br>
|
|
@@ -178,7 +197,9 @@ Keys: <kbd>↑</kbd><kbd>↓</kbd> select · <kbd>Space</kbd> toggle · <kbd>1</
|
|
|
178
197
|
|
|
179
198
|
## Live proxy list
|
|
180
199
|
|
|
181
|
-
Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](../../tree/proxy-list) branch – every entry worked in the last run,
|
|
200
|
+
Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](../../tree/proxy-list) branch – every entry worked in the last run, best first: fast ones that are likely to still be up come on top.
|
|
201
|
+
|
|
202
|
+
> **Just want the lists?** They also live in a repository of their own, **[maximilianfeix/free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)** – one list per protocol, per country and per site, updated every hour, with the numbers of the last run on the front page. Watch or star it to keep it at hand.
|
|
182
203
|
|
|
183
204
|
<a href="https://maximilianfeix.github.io/proxy-scraper/"><picture>
|
|
184
205
|
<source media="(prefers-color-scheme: dark)" srcset="https://maximilianfeix.github.io/proxy-scraper/chart-dark.svg">
|
|
@@ -208,7 +229,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
|
|
|
208
229
|
| HTTP · SOCKS4 · SOCKS5 | `1.2.3.4:8080` | [http.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt) · [socks4.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt) · [socks5.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt) |
|
|
209
230
|
| HTTPS-capable only | `type://ip:port` | [https.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/https.txt) |
|
|
210
231
|
| Elite only | `type://ip:port` | [elite.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/elite.txt) |
|
|
211
|
-
| Gets through to Google · Reddit · Amazon · Instagram · TikTok (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) |
|
|
232
|
+
| Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) · [discord.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/discord.txt) |
|
|
212
233
|
| Stable, on the list in 90 %+ of this week's runs | `type://ip:port` | [stable.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/stable.txt) |
|
|
213
234
|
| With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | [proxies.json](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.json) · [proxies.csv](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.csv) |
|
|
214
235
|
|
|
@@ -319,7 +340,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
|
|
|
319
340
|
<td valign="top">
|
|
320
341
|
|
|
321
342
|
**Real verification**<br>
|
|
322
|
-
Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests
|
|
343
|
+
Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests: over 3.6 million checks, 54 % of the proxies that answered the first request failed the second. A third request catches proxies that **tamper with content**: about one in 40 working proxies changed a known page, usually by injecting a script ([the numbers](docs/free-proxies-in-numbers.md)). Plus: HTTPS through a tunnel with **verified TLS**, anonymity level *elite / anonymous / transparent* and the country of the exit IP.
|
|
323
344
|
|
|
324
345
|
</td>
|
|
325
346
|
<td valign="top">
|
|
@@ -361,13 +382,13 @@ Speed chart, latency histogram, protocols, countries and the latest hits in real
|
|
|
361
382
|
<td valign="top">
|
|
362
383
|
|
|
363
384
|
**Runs everywhere**<br>
|
|
364
|
-
macOS, Linux and Windows, Python 3.9 to 3.
|
|
385
|
+
macOS, Linux and Windows, Python 3.9 to 3.14. Only two dependencies: `rich` and `certifi`. It even notices when a firewall blocks proxies.
|
|
365
386
|
|
|
366
387
|
</td>
|
|
367
388
|
<td valign="top">
|
|
368
389
|
|
|
369
390
|
**Thoroughly tested**<br>
|
|
370
|
-
|
|
391
|
+
760+ tests run offline against real mini proxies and honeypots on `localhost` – on Linux, macOS and Windows with Python 3.9, 3.11, 3.13 and 3.14.
|
|
371
392
|
|
|
372
393
|
</td>
|
|
373
394
|
</tr>
|
|
@@ -446,7 +467,7 @@ pool = itertools.cycle(p.url for p in proxies)
|
|
|
446
467
|
r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
|
|
447
468
|
```
|
|
448
469
|
|
|
449
|
-
Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
|
|
470
|
+
Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`, `"discord"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
|
|
450
471
|
|
|
451
472
|
Or let the library do the retrying: `ProxyRotator` loads a URL through the list and moves on to the next proxy when one fails – HTTPS only through proxies with verified TLS.
|
|
452
473
|
|
|
@@ -515,7 +536,7 @@ Without a password, `--serve-host` means **anyone who reaches the port can use i
|
|
|
515
536
|
|
|
516
537
|
- every connection goes through a different proxy (unless sticky); fast and proven ones are preferred
|
|
517
538
|
- `CONNECT` for HTTPS and plain HTTP requests; HTTP, SOCKS4 and SOCKS5 proxies can sit behind it (SOCKS5 with DNS through the proxy)
|
|
518
|
-
- HTTPS
|
|
539
|
+
- HTTPS prefers proxies that passed the test with **verified TLS**; when no such proxy fits right now – none matches a wish like `country-de`, or they have all dropped out – it uses the others – your client's own certificate check still catches a proxy that breaks the encryption, so leave it on
|
|
519
540
|
- if a proxy stays silent inside the tunnel or returns an error page instead of TLS, the same first packet quietly goes to the next one
|
|
520
541
|
- three failures in a row and a proxy leaves the rotation – every 5 minutes those get re-checked and come back if they work again
|
|
521
542
|
- `--serve-refill 6` checks fresh proxies every 6 hours in the background (the live list with `--recheck live`, otherwise the last run + history) with the same checks and filters, and adds the hits – a server that runs for days doesn't run dry
|
|
@@ -523,6 +544,10 @@ Without a password, `--serve-host` means **anyone who reaches the port can use i
|
|
|
523
544
|
|
|
524
545
|
In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In the wizard this is **Proxy server right away**.
|
|
525
546
|
|
|
547
|
+
**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.
|
|
548
|
+
|
|
549
|
+
<div align="center"><img src="docs/dashboard-live.png" alt="The live dashboard of the rotating proxy server: usable proxies, success rate, requests per second, countries and the latest connections" width="860"></div>
|
|
550
|
+
|
|
526
551
|
<a id="pool-api"></a>
|
|
527
552
|
|
|
528
553
|
### Proxy pool API
|
|
@@ -565,6 +590,13 @@ The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts e
|
|
|
565
590
|
|
|
566
591
|
## How it works
|
|
567
592
|
|
|
593
|
+
<picture>
|
|
594
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
|
|
595
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
|
|
596
|
+
<img src="docs/checks-dark.svg" alt="The five checks: 700+ lists, a real handshake, two sites with one IP, nothing injected, the details" width="100%">
|
|
597
|
+
</picture>
|
|
598
|
+
|
|
599
|
+
|
|
568
600
|
```mermaid
|
|
569
601
|
flowchart LR
|
|
570
602
|
A[sources.json<br/>meta lists<br/>GitHub discovery] --> B[Fetch & parse<br/>in parallel on all cores]
|
|
@@ -741,12 +773,32 @@ proxychains4 -f results/latest/proxychains.conf curl https://api.ipify.org
|
|
|
741
773
|
|
|
742
774
|
`clash.yaml` has all HTTP and SOCKS5 proxies plus a `url-test` group that always picks the fastest. `singbox.json` does the same for sing-box, SOCKS4 included, and opens a local proxy: `sing-box run -c results/latest/singbox.json`, then use `127.0.0.1:2080` as HTTP or SOCKS5 proxy. All three leave out HTTP proxies that can't tunnel (`CONNECT`), because these tools tunnel everything.
|
|
743
775
|
|
|
776
|
+
**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`.
|
|
777
|
+
|
|
778
|
+
**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:
|
|
779
|
+
|
|
780
|
+
| Tool | Where | Set |
|
|
781
|
+
|---|---|---|
|
|
782
|
+
| Burp Suite | *Settings → Network → Connections → Upstream proxy servers* | a rule for destination host `*`, proxy host `127.0.0.1`, port `8899`; with `--serve-password` add Basic auth (user `any` or a wish like `country-de`, the password) |
|
|
783
|
+
| OWASP ZAP | *Options → Network → Connection → HTTP Proxy* | host `127.0.0.1`, port `8899`, and under its authentication the user (`any` or a wish) and the password – use the HTTP setting, not SOCKS: ZAP never sends loopback addresses through its SOCKS proxy |
|
|
784
|
+
| mitmproxy | command line | `mitmproxy --mode upstream:http://127.0.0.1:8899 --upstream-auth country-us:x` |
|
|
785
|
+
|
|
786
|
+
Username wishes – `country-us` sends everything out through US proxies, `session-NAME` keeps one exit IP for a login flow – reach the server as the proxy login. mitmproxy sends it right away; Burp and ZAP may wait to be asked, so start the server with `--serve-password` when you rely on a wish there. **Keep your tool's upstream certificate checks on** (no `--ssl-insecure` in mitmproxy, no "ignore certificate errors" upstream in Burp or ZAP): free proxies are strangers, and that check is what stops one from reading or changing your HTTPS traffic. Tested end to end with mitmproxy 12, certificate checks on: HTTP and HTTPS through mitmproxy and the rotating server, every request out through a US proxy, and a site with an expired certificate refused. Only test what you're allowed to.
|
|
787
|
+
|
|
744
788
|
**In a pipe** – `-o -` prints the hits to stdout, the interface moves to stderr
|
|
745
789
|
|
|
746
790
|
```bash
|
|
747
791
|
proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
|
|
748
792
|
```
|
|
749
793
|
|
|
794
|
+
**Check a list you already have** – `--recheck -` reads it from stdin: plain `ip:port` lines, `type://ip:port`, logins, JSON, a CSV export or a table pasted from a website (HTML or Markdown), in the order it came in. Only what works from your network comes out:
|
|
795
|
+
|
|
796
|
+
```bash
|
|
797
|
+
curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
Proxies without a type are tried as HTTP and as SOCKS5 – or as SOCKS4 with `--types socks4` alone. A password with a comma, quote, `|` or bracket can't be told apart from the text around it in a paste; put such proxies in a file, one per line, and use `--recheck file.txt`.
|
|
801
|
+
|
|
750
802
|
**Any tool, through the rotating server**
|
|
751
803
|
|
|
752
804
|
```bash
|
|
@@ -819,7 +871,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
819
871
|
| `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
|
|
820
872
|
| `--no-dnsbl` | skip the blocklist lookup |
|
|
821
873
|
| `--target URL` | only proxies that reach this site (repeatable) |
|
|
822
|
-
| `--recheck [FILE
|
|
874
|
+
| `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
|
|
823
875
|
| `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
|
|
824
876
|
| `--no-geo` | skip the country lookup |
|
|
825
877
|
| `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
|
|
@@ -834,7 +886,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
834
886
|
| `--serve-refill HOURS` | while serving, check fresh proxies every HOURS and add the hits to the pool |
|
|
835
887
|
| `--serve [PORT]` | afterwards serve as a rotating proxy on `127.0.0.1:PORT` (default: 8899) |
|
|
836
888
|
| `-o FILE` | also write all hits to this file; `-o -` prints them to stdout |
|
|
837
|
-
| `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl` or `all` |
|
|
889
|
+
| `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl`, `pac` or `all` |
|
|
838
890
|
| `-V`, `--version` | print the version |
|
|
839
891
|
| `--completion SHELL` | print the tab completion script for bash, zsh, fish or PowerShell |
|
|
840
892
|
|
|
@@ -866,6 +918,25 @@ The repo does part of the work itself:
|
|
|
866
918
|
|
|
867
919
|
## FAQ
|
|
868
920
|
|
|
921
|
+
<a id="who-runs-free-proxies"></a>
|
|
922
|
+
|
|
923
|
+
<details open>
|
|
924
|
+
<summary><b>Who runs free proxies – and should you use them?</b></summary>
|
|
925
|
+
<br>
|
|
926
|
+
|
|
927
|
+
Almost nobody runs a free proxy for you. What ends up on public lists is usually one of these:
|
|
928
|
+
|
|
929
|
+
- **Misconfigured servers** – a Squid, a router or an app with a proxy port that was meant to stay internal.
|
|
930
|
+
- **Deliberately open proxies** – a few volunteers and research projects, and services that give some away to sell the rest.
|
|
931
|
+
- **Infected machines** – computers and IoT devices whose owners don't know they relay traffic. Many residential exits are like this.
|
|
932
|
+
- **Traps** – honeypots that log what goes through them, and proxies that rewrite pages to inject ads or scripts.
|
|
933
|
+
|
|
934
|
+
proxy-scraper can't tell an infected home router from an open office proxy, but it filters what it can measure: a proxy has to answer two independent requests with the same exit IP (honeypots that only answer scanners drop out), deliver a known page byte for byte (injectors drop out), and HTTPS counts only with a certificate that verifies end to end. Each hit says whether its exit is in a datacenter.
|
|
935
|
+
|
|
936
|
+
Good uses: public data, checking how a site looks from another country, testing your own blocking and rate limits, research. Never send passwords, cookies, payment or personal data through a free proxy, and keep HTTPS certificate checks on. Use them only where you're allowed to.
|
|
937
|
+
|
|
938
|
+
</details>
|
|
939
|
+
|
|
869
940
|
<details>
|
|
870
941
|
<summary><b>Almost nothing gets through.</b></summary>
|
|
871
942
|
<br>
|
|
@@ -920,7 +991,9 @@ Only for things that don't matter. Public proxies are run by strangers who can r
|
|
|
920
991
|
|
|
921
992
|
What's next is in the [open issues](../../issues) – ideas and wishes are welcome as an [issue](../../issues/new/choose). During Hacktoberfest there are [beginner-friendly issues](../../issues?q=is%3Aopen+label%3Ahacktoberfest) with pointers on where to start.
|
|
922
993
|
|
|
923
|
-
|
|
994
|
+
Shipped in v1.24: `--recheck -` for lists you pipe in, which proxies get through to Discord, and a README you can try in five seconds.
|
|
995
|
+
|
|
996
|
+
Shipped in v1.22 and v1.23: a live dashboard for the rotating server, `--export pac` and an hourly `proxy.pac`, "best first" that counts how likely a proxy is still up, the lists in a repository of their own ([free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)), daily snapshots on Hugging Face, `brew install`, a Chinese README, Python 3.14, and a recipe for Burp Suite, ZAP and mitmproxy.
|
|
924
997
|
|
|
925
998
|
Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere, daily snapshots, a rotating proxy URL for requests, httpx and Playwright, `--pick` for working proxies without a scan, a proxy pool API compatible with jhao104/proxy_pool, your own lists with `--source`, a GitHub Action, a Telegram bot and an Atom feed for the weekly report.
|
|
926
999
|
|
|
@@ -969,12 +1042,13 @@ proxyscraper/
|
|
|
969
1042
|
├── geodb.py DB-IP country database (monthly, binary search)
|
|
970
1043
|
├── targets.py target sites for --target
|
|
971
1044
|
├── output.py result files
|
|
972
|
-
├── exporters.py proxychains, Clash, sing-box and
|
|
1045
|
+
├── exporters.py proxychains, Clash, sing-box, curl and PAC formats (--export)
|
|
973
1046
|
├── server/ rotating proxy server (--serve): pool · http · upstream · socks · status · api · core
|
|
974
1047
|
├── api.py find_proxies() / check_proxies() for Python
|
|
975
1048
|
├── agent.py MCP tools without the SDK: live list, filters, fetch through proxies
|
|
976
1049
|
├── mcp_server.py MCP server (proxy-scraper-mcp) for AI agents
|
|
977
1050
|
├── publish.py live list for GitHub Actions
|
|
1051
|
+
├── mirror.py the same lists in their own repo (free-proxy-list)
|
|
978
1052
|
├── paths.py where state and results are stored
|
|
979
1053
|
├── compat.py differences between Unix and Windows
|
|
980
1054
|
├── netio.py small HTTP client on asyncio
|
|
@@ -989,6 +1063,14 @@ proxyscraper/
|
|
|
989
1063
|
|
|
990
1064
|
Questions, ideas and things you built with it go to [Discussions](https://github.com/maximilianfeix/proxy-scraper/discussions) – bugs to the [issues](../../issues). If proxy-scraper saves you time, a ⭐ helps others find it.
|
|
991
1065
|
|
|
1066
|
+
Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
|
|
1067
|
+
|
|
1068
|
+
<a href="https://github.com/maximilianfeix/proxy-scraper/graphs/contributors">
|
|
1069
|
+
<img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
|
|
1070
|
+
</a>
|
|
1071
|
+
|
|
1072
|
+
Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
|
|
1073
|
+
|
|
992
1074
|
<a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
|
|
993
1075
|
<picture>
|
|
994
1076
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
|
|
@@ -10,16 +10,19 @@
|
|
|
10
10
|
[](https://github.com/maximilianfeix/proxy-scraper/releases/latest)
|
|
11
11
|
[](#live-list)
|
|
12
12
|
[](https://pypi.org/project/proxy-scraper-cli/)
|
|
13
|
-
[](pyproject.toml)
|
|
14
14
|
[](https://github.com/maximilianfeix/proxy-scraper/stargazers)
|
|
15
15
|
[](LICENSE)
|
|
16
16
|
|
|
17
17
|
<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>
|
|
18
|
+
<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>
|
|
18
19
|
<a href="#install"><img src="https://img.shields.io/badge/Install-121113?style=for-the-badge" alt="Install"></a>
|
|
19
20
|
<a href="#from-python"><img src="https://img.shields.io/badge/Python_API-121113?style=for-the-badge" alt="Python API"></a>
|
|
20
21
|
<a href="#mcp"><img src="https://img.shields.io/badge/MCP_server-121113?style=for-the-badge" alt="MCP server for AI agents"></a>
|
|
21
22
|
<a href="bot/"><img src="https://img.shields.io/badge/Discord_bot-121113?style=for-the-badge" alt="Discord bot"></a>
|
|
22
23
|
|
|
24
|
+
**English** · [简体中文](README.zh-CN.md)
|
|
25
|
+
|
|
23
26
|
[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)
|
|
24
27
|
|
|
25
28
|
</div>
|
|
@@ -30,16 +33,23 @@ Most free proxy lists are 95 % dead, and a good part of the rest are honeypots o
|
|
|
30
33
|
|
|
31
34
|
**In numbers:** in one day it checked 3.6 million free proxies – 1.1 % worked, and more than half of the ones that answered failed a second request. [What's actually out there →](docs/free-proxies-in-numbers.md)
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
**Try it – no install, about five seconds:**
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
uvx proxy-scraper-cli --pick 5 --types socks5 # 5 checked proxies
|
|
40
|
+
|
|
41
|
+
# or just the plain list
|
|
42
|
+
curl -s https://maximilianfeix.github.io/proxy-scraper/socks5.txt | head
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`uvx` comes with [uv](https://docs.astral.sh/uv/); `pipx run proxy-scraper-cli --pick 5` does the same.
|
|
38
46
|
|
|
39
47
|
<div align="center">
|
|
40
|
-
<img src="docs/demo.svg" alt="Animated demo:
|
|
48
|
+
<img src="docs/demo.svg" alt="Animated demo: the live dashboard during a check, the report, the setup wizard and collecting" width="880">
|
|
41
49
|
</div>
|
|
42
50
|
|
|
51
|
+
> **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)
|
|
52
|
+
|
|
43
53
|
<details>
|
|
44
54
|
<summary><b>Table of contents</b></summary>
|
|
45
55
|
|
|
@@ -73,6 +83,14 @@ proxy-scraper
|
|
|
73
83
|
|
|
74
84
|
The package is called `proxy-scraper-cli` on PyPI (the plain name is taken), the command is `proxy-scraper`.
|
|
75
85
|
|
|
86
|
+
**With [Homebrew](https://brew.sh)** on macOS and Linux:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
brew install maximilianfeix/tap/proxy-scraper
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The formula follows each release within about a day.
|
|
93
|
+
|
|
76
94
|
<details>
|
|
77
95
|
<summary><b>Other ways: Docker, pip, a faster event loop, or straight from the repo</b></summary>
|
|
78
96
|
<br>
|
|
@@ -137,7 +155,9 @@ Keys: <kbd>↑</kbd><kbd>↓</kbd> select · <kbd>Space</kbd> toggle · <kbd>1</
|
|
|
137
155
|
|
|
138
156
|
## Live proxy list
|
|
139
157
|
|
|
140
|
-
Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](../../tree/proxy-list) branch – every entry worked in the last run,
|
|
158
|
+
Don't want to scan yourself? Every hour **GitHub Actions** runs the tool and publishes the hits to the [`proxy-list`](../../tree/proxy-list) branch – every entry worked in the last run, best first: fast ones that are likely to still be up come on top.
|
|
159
|
+
|
|
160
|
+
> **Just want the lists?** They also live in a repository of their own, **[maximilianfeix/free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)** – one list per protocol, per country and per site, updated every hour, with the numbers of the last run on the front page. Watch or star it to keep it at hand.
|
|
141
161
|
|
|
142
162
|
<a href="https://maximilianfeix.github.io/proxy-scraper/"><picture>
|
|
143
163
|
<source media="(prefers-color-scheme: dark)" srcset="https://maximilianfeix.github.io/proxy-scraper/chart-dark.svg">
|
|
@@ -167,7 +187,7 @@ Every protocol and country also has its own page with a plain download, e.g. [SO
|
|
|
167
187
|
| HTTP · SOCKS4 · SOCKS5 | `1.2.3.4:8080` | [http.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/http.txt) · [socks4.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks4.txt) · [socks5.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt) |
|
|
168
188
|
| HTTPS-capable only | `type://ip:port` | [https.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/https.txt) |
|
|
169
189
|
| Elite only | `type://ip:port` | [elite.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/elite.txt) |
|
|
170
|
-
| Gets through to Google · Reddit · Amazon · Instagram · TikTok (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) |
|
|
190
|
+
| Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (no captcha, no block in the last run) | `type://ip:port` | [google.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/google.txt) · [reddit.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/reddit.txt) · [amazon.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/amazon.txt) · [instagram.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/instagram.txt) · [tiktok.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/tiktok.txt) · [discord.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/works-with/discord.txt) |
|
|
171
191
|
| Stable, on the list in 90 %+ of this week's runs | `type://ip:port` | [stable.txt](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/stable.txt) |
|
|
172
192
|
| With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | [proxies.json](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.json) · [proxies.csv](https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/proxies.csv) |
|
|
173
193
|
|
|
@@ -278,7 +298,7 @@ Started without arguments, the tool asks what you need using the arrow keys –
|
|
|
278
298
|
<td valign="top">
|
|
279
299
|
|
|
280
300
|
**Real verification**<br>
|
|
281
|
-
Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests
|
|
301
|
+
Every hit has to fetch two independent pages – that weeds out **honeypots** that only answer check requests: over 3.6 million checks, 54 % of the proxies that answered the first request failed the second. A third request catches proxies that **tamper with content**: about one in 40 working proxies changed a known page, usually by injecting a script ([the numbers](docs/free-proxies-in-numbers.md)). Plus: HTTPS through a tunnel with **verified TLS**, anonymity level *elite / anonymous / transparent* and the country of the exit IP.
|
|
282
302
|
|
|
283
303
|
</td>
|
|
284
304
|
<td valign="top">
|
|
@@ -320,13 +340,13 @@ Speed chart, latency histogram, protocols, countries and the latest hits in real
|
|
|
320
340
|
<td valign="top">
|
|
321
341
|
|
|
322
342
|
**Runs everywhere**<br>
|
|
323
|
-
macOS, Linux and Windows, Python 3.9 to 3.
|
|
343
|
+
macOS, Linux and Windows, Python 3.9 to 3.14. Only two dependencies: `rich` and `certifi`. It even notices when a firewall blocks proxies.
|
|
324
344
|
|
|
325
345
|
</td>
|
|
326
346
|
<td valign="top">
|
|
327
347
|
|
|
328
348
|
**Thoroughly tested**<br>
|
|
329
|
-
|
|
349
|
+
760+ tests run offline against real mini proxies and honeypots on `localhost` – on Linux, macOS and Windows with Python 3.9, 3.11, 3.13 and 3.14.
|
|
330
350
|
|
|
331
351
|
</td>
|
|
332
352
|
</tr>
|
|
@@ -405,7 +425,7 @@ pool = itertools.cycle(p.url for p in proxies)
|
|
|
405
425
|
r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
|
|
406
426
|
```
|
|
407
427
|
|
|
408
|
-
Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
|
|
428
|
+
Same filters as `find_proxies`, plus `min_uptime`, `works_on` (`["google"]`, `"reddit"`, `"amazon"`, `"instagram"`, `"tiktok"`, `"discord"`) and `limit`. Every result also has `uptime_24h`, `uptime_7d`, `first_seen`, `up_for_hours` and `sites`.
|
|
409
429
|
|
|
410
430
|
Or let the library do the retrying: `ProxyRotator` loads a URL through the list and moves on to the next proxy when one fails – HTTPS only through proxies with verified TLS.
|
|
411
431
|
|
|
@@ -474,7 +494,7 @@ Without a password, `--serve-host` means **anyone who reaches the port can use i
|
|
|
474
494
|
|
|
475
495
|
- every connection goes through a different proxy (unless sticky); fast and proven ones are preferred
|
|
476
496
|
- `CONNECT` for HTTPS and plain HTTP requests; HTTP, SOCKS4 and SOCKS5 proxies can sit behind it (SOCKS5 with DNS through the proxy)
|
|
477
|
-
- HTTPS
|
|
497
|
+
- HTTPS prefers proxies that passed the test with **verified TLS**; when no such proxy fits right now – none matches a wish like `country-de`, or they have all dropped out – it uses the others – your client's own certificate check still catches a proxy that breaks the encryption, so leave it on
|
|
478
498
|
- if a proxy stays silent inside the tunnel or returns an error page instead of TLS, the same first packet quietly goes to the next one
|
|
479
499
|
- three failures in a row and a proxy leaves the rotation – every 5 minutes those get re-checked and come back if they work again
|
|
480
500
|
- `--serve-refill 6` checks fresh proxies every 6 hours in the background (the live list with `--recheck live`, otherwise the last run + history) with the same checks and filters, and adds the hits – a server that runs for days doesn't run dry
|
|
@@ -482,6 +502,10 @@ Without a password, `--serve-host` means **anyone who reaches the port can use i
|
|
|
482
502
|
|
|
483
503
|
In testing: 20 of 20 HTTPS requests succeeded, over 15 different exit IPs. In the wizard this is **Proxy server right away**.
|
|
484
504
|
|
|
505
|
+
**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.
|
|
506
|
+
|
|
507
|
+
<div align="center"><img src="docs/dashboard-live.png" alt="The live dashboard of the rotating proxy server: usable proxies, success rate, requests per second, countries and the latest connections" width="860"></div>
|
|
508
|
+
|
|
485
509
|
<a id="pool-api"></a>
|
|
486
510
|
|
|
487
511
|
### Proxy pool API
|
|
@@ -524,6 +548,13 @@ The live list can also come to you: [`bot/`](bot/) is a Discord bot that posts e
|
|
|
524
548
|
|
|
525
549
|
## How it works
|
|
526
550
|
|
|
551
|
+
<picture>
|
|
552
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/checks-dark.svg">
|
|
553
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/checks-light.svg">
|
|
554
|
+
<img src="docs/checks-dark.svg" alt="The five checks: 700+ lists, a real handshake, two sites with one IP, nothing injected, the details" width="100%">
|
|
555
|
+
</picture>
|
|
556
|
+
|
|
557
|
+
|
|
527
558
|
```mermaid
|
|
528
559
|
flowchart LR
|
|
529
560
|
A[sources.json<br/>meta lists<br/>GitHub discovery] --> B[Fetch & parse<br/>in parallel on all cores]
|
|
@@ -700,12 +731,32 @@ proxychains4 -f results/latest/proxychains.conf curl https://api.ipify.org
|
|
|
700
731
|
|
|
701
732
|
`clash.yaml` has all HTTP and SOCKS5 proxies plus a `url-test` group that always picks the fastest. `singbox.json` does the same for sing-box, SOCKS4 included, and opens a local proxy: `sing-box run -c results/latest/singbox.json`, then use `127.0.0.1:2080` as HTTP or SOCKS5 proxy. All three leave out HTTP proxies that can't tunnel (`CONNECT`), because these tools tunnel everything.
|
|
702
733
|
|
|
734
|
+
**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`.
|
|
735
|
+
|
|
736
|
+
**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:
|
|
737
|
+
|
|
738
|
+
| Tool | Where | Set |
|
|
739
|
+
|---|---|---|
|
|
740
|
+
| Burp Suite | *Settings → Network → Connections → Upstream proxy servers* | a rule for destination host `*`, proxy host `127.0.0.1`, port `8899`; with `--serve-password` add Basic auth (user `any` or a wish like `country-de`, the password) |
|
|
741
|
+
| OWASP ZAP | *Options → Network → Connection → HTTP Proxy* | host `127.0.0.1`, port `8899`, and under its authentication the user (`any` or a wish) and the password – use the HTTP setting, not SOCKS: ZAP never sends loopback addresses through its SOCKS proxy |
|
|
742
|
+
| mitmproxy | command line | `mitmproxy --mode upstream:http://127.0.0.1:8899 --upstream-auth country-us:x` |
|
|
743
|
+
|
|
744
|
+
Username wishes – `country-us` sends everything out through US proxies, `session-NAME` keeps one exit IP for a login flow – reach the server as the proxy login. mitmproxy sends it right away; Burp and ZAP may wait to be asked, so start the server with `--serve-password` when you rely on a wish there. **Keep your tool's upstream certificate checks on** (no `--ssl-insecure` in mitmproxy, no "ignore certificate errors" upstream in Burp or ZAP): free proxies are strangers, and that check is what stops one from reading or changing your HTTPS traffic. Tested end to end with mitmproxy 12, certificate checks on: HTTP and HTTPS through mitmproxy and the rotating server, every request out through a US proxy, and a site with an expired certificate refused. Only test what you're allowed to.
|
|
745
|
+
|
|
703
746
|
**In a pipe** – `-o -` prints the hits to stdout, the interface moves to stderr
|
|
704
747
|
|
|
705
748
|
```bash
|
|
706
749
|
proxy-scraper --recheck live --want 20 -y -o - | grep '^socks5://' > socks.txt
|
|
707
750
|
```
|
|
708
751
|
|
|
752
|
+
**Check a list you already have** – `--recheck -` reads it from stdin: plain `ip:port` lines, `type://ip:port`, logins, JSON, a CSV export or a table pasted from a website (HTML or Markdown), in the order it came in. Only what works from your network comes out:
|
|
753
|
+
|
|
754
|
+
```bash
|
|
755
|
+
curl -s https://example.com/proxies.txt | proxy-scraper --recheck - -o - > working.txt
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
Proxies without a type are tried as HTTP and as SOCKS5 – or as SOCKS4 with `--types socks4` alone. A password with a comma, quote, `|` or bracket can't be told apart from the text around it in a paste; put such proxies in a file, one per line, and use `--recheck file.txt`.
|
|
759
|
+
|
|
709
760
|
**Any tool, through the rotating server**
|
|
710
761
|
|
|
711
762
|
```bash
|
|
@@ -778,7 +829,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
778
829
|
| `--no-blocklisted` | skip proxies whose exit IP is on the SpamCop blocklist – those often get captchas |
|
|
779
830
|
| `--no-dnsbl` | skip the blocklist lookup |
|
|
780
831
|
| `--target URL` | only proxies that reach this site (repeatable) |
|
|
781
|
-
| `--recheck [FILE
|
|
832
|
+
| `--recheck [FILE\|-\|live]` | only check proxies from a file, stdin (`-`), the last run, or the public live list |
|
|
782
833
|
| `--fast` | skip the HTTPS test (confirmation and anonymity still run) |
|
|
783
834
|
| `--no-geo` | skip the country lookup |
|
|
784
835
|
| `-c`, `--concurrency N` | simultaneous checks (default: 2000) |
|
|
@@ -793,7 +844,7 @@ curl.exe -x (Get-Content "$run\all.txt" -TotalCount 1) http://api.ipify.org
|
|
|
793
844
|
| `--serve-refill HOURS` | while serving, check fresh proxies every HOURS and add the hits to the pool |
|
|
794
845
|
| `--serve [PORT]` | afterwards serve as a rotating proxy on `127.0.0.1:PORT` (default: 8899) |
|
|
795
846
|
| `-o FILE` | also write all hits to this file; `-o -` prints them to stdout |
|
|
796
|
-
| `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl` or `all` |
|
|
847
|
+
| `--export FORMATS` | extra files for other tools: `proxychains`, `clash`, `singbox`, `curl`, `pac` or `all` |
|
|
797
848
|
| `-V`, `--version` | print the version |
|
|
798
849
|
| `--completion SHELL` | print the tab completion script for bash, zsh, fish or PowerShell |
|
|
799
850
|
|
|
@@ -825,6 +876,25 @@ The repo does part of the work itself:
|
|
|
825
876
|
|
|
826
877
|
## FAQ
|
|
827
878
|
|
|
879
|
+
<a id="who-runs-free-proxies"></a>
|
|
880
|
+
|
|
881
|
+
<details open>
|
|
882
|
+
<summary><b>Who runs free proxies – and should you use them?</b></summary>
|
|
883
|
+
<br>
|
|
884
|
+
|
|
885
|
+
Almost nobody runs a free proxy for you. What ends up on public lists is usually one of these:
|
|
886
|
+
|
|
887
|
+
- **Misconfigured servers** – a Squid, a router or an app with a proxy port that was meant to stay internal.
|
|
888
|
+
- **Deliberately open proxies** – a few volunteers and research projects, and services that give some away to sell the rest.
|
|
889
|
+
- **Infected machines** – computers and IoT devices whose owners don't know they relay traffic. Many residential exits are like this.
|
|
890
|
+
- **Traps** – honeypots that log what goes through them, and proxies that rewrite pages to inject ads or scripts.
|
|
891
|
+
|
|
892
|
+
proxy-scraper can't tell an infected home router from an open office proxy, but it filters what it can measure: a proxy has to answer two independent requests with the same exit IP (honeypots that only answer scanners drop out), deliver a known page byte for byte (injectors drop out), and HTTPS counts only with a certificate that verifies end to end. Each hit says whether its exit is in a datacenter.
|
|
893
|
+
|
|
894
|
+
Good uses: public data, checking how a site looks from another country, testing your own blocking and rate limits, research. Never send passwords, cookies, payment or personal data through a free proxy, and keep HTTPS certificate checks on. Use them only where you're allowed to.
|
|
895
|
+
|
|
896
|
+
</details>
|
|
897
|
+
|
|
828
898
|
<details>
|
|
829
899
|
<summary><b>Almost nothing gets through.</b></summary>
|
|
830
900
|
<br>
|
|
@@ -879,7 +949,9 @@ Only for things that don't matter. Public proxies are run by strangers who can r
|
|
|
879
949
|
|
|
880
950
|
What's next is in the [open issues](../../issues) – ideas and wishes are welcome as an [issue](../../issues/new/choose). During Hacktoberfest there are [beginner-friendly issues](../../issues?q=is%3Aopen+label%3Ahacktoberfest) with pointers on where to start.
|
|
881
951
|
|
|
882
|
-
|
|
952
|
+
Shipped in v1.24: `--recheck -` for lists you pipe in, which proxies get through to Discord, and a README you can try in five seconds.
|
|
953
|
+
|
|
954
|
+
Shipped in v1.22 and v1.23: a live dashboard for the rotating server, `--export pac` and an hourly `proxy.pac`, "best first" that counts how likely a proxy is still up, the lists in a repository of their own ([free-proxy-list](https://github.com/maximilianfeix/free-proxy-list)), daily snapshots on Hugging Face, `brew install`, a Chinese README, Python 3.14, and a recipe for Burp Suite, ZAP and mitmproxy.
|
|
883
955
|
|
|
884
956
|
Shipped in v1.10 to v1.21: download speed per proxy and "best first" everywhere, daily snapshots, a rotating proxy URL for requests, httpx and Playwright, `--pick` for working proxies without a scan, a proxy pool API compatible with jhao104/proxy_pool, your own lists with `--source`, a GitHub Action, a Telegram bot and an Atom feed for the weekly report.
|
|
885
957
|
|
|
@@ -928,12 +1000,13 @@ proxyscraper/
|
|
|
928
1000
|
├── geodb.py DB-IP country database (monthly, binary search)
|
|
929
1001
|
├── targets.py target sites for --target
|
|
930
1002
|
├── output.py result files
|
|
931
|
-
├── exporters.py proxychains, Clash, sing-box and
|
|
1003
|
+
├── exporters.py proxychains, Clash, sing-box, curl and PAC formats (--export)
|
|
932
1004
|
├── server/ rotating proxy server (--serve): pool · http · upstream · socks · status · api · core
|
|
933
1005
|
├── api.py find_proxies() / check_proxies() for Python
|
|
934
1006
|
├── agent.py MCP tools without the SDK: live list, filters, fetch through proxies
|
|
935
1007
|
├── mcp_server.py MCP server (proxy-scraper-mcp) for AI agents
|
|
936
1008
|
├── publish.py live list for GitHub Actions
|
|
1009
|
+
├── mirror.py the same lists in their own repo (free-proxy-list)
|
|
937
1010
|
├── paths.py where state and results are stored
|
|
938
1011
|
├── compat.py differences between Unix and Windows
|
|
939
1012
|
├── netio.py small HTTP client on asyncio
|
|
@@ -948,6 +1021,14 @@ proxyscraper/
|
|
|
948
1021
|
|
|
949
1022
|
Questions, ideas and things you built with it go to [Discussions](https://github.com/maximilianfeix/proxy-scraper/discussions) – bugs to the [issues](../../issues). If proxy-scraper saves you time, a ⭐ helps others find it.
|
|
950
1023
|
|
|
1024
|
+
Thanks to everyone who helped build it – new sources, countries, Python 3.14, examples and more:
|
|
1025
|
+
|
|
1026
|
+
<a href="https://github.com/maximilianfeix/proxy-scraper/graphs/contributors">
|
|
1027
|
+
<img src="https://contrib.rocks/image?repo=maximilianfeix/proxy-scraper" alt="Contributors to proxy-scraper">
|
|
1028
|
+
</a>
|
|
1029
|
+
|
|
1030
|
+
Want to join? [Beginner-friendly issues](../../issues?q=is%3Aopen+label%3A%22good+first+issue%22) say where to start.
|
|
1031
|
+
|
|
951
1032
|
<a href="https://star-history.com/#maximilianfeix/proxy-scraper&Date">
|
|
952
1033
|
<picture>
|
|
953
1034
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=maximilianfeix/proxy-scraper&type=Date&theme=dark">
|