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