An open API service indexing awesome lists of open source software.

https://github.com/jesewe/proxy-checker

This script is designed to check the availability of HTTP, SOCKS4, and SOCKS5 proxies from various online sources.
https://github.com/jesewe/proxy-checker

gui proxy proxy-checker proxy-list pyqt6 python python3

Last synced: 10 days ago
JSON representation

This script is designed to check the availability of HTTP, SOCKS4, and SOCKS5 proxies from various online sources.

Awesome Lists containing this project

README

          


ProxyChecker

ProxyChecker


A fast, concurrent proxy checker for HTTP, SOCKS4, and SOCKS5 proxies — with a fully dark, modern GUI.

![Downloads](https://img.shields.io/github/downloads/jesewe/proxy-checker/total?style=for-the-badge&logo=github&color=D5006D)
![Platforms](https://img.shields.io/badge/platform-Windows-blue?style=for-the-badge&logo=windows&color=D5006D)
![License](https://img.shields.io/github/license/jesewe/proxy-checker?style=for-the-badge&color=D5006D)
![Version](https://img.shields.io/badge/version-2.0.0-informational?style=for-the-badge&color=D5006D)

Overview
Installation
Usage
Configuration
Troubleshooting

---

## Overview

**ProxyChecker** verifies HTTP, SOCKS4, and SOCKS5 proxy lists by sending concurrent test requests. v2.0 is a ground-up rewrite: the codebase is split into focused modules, a thread-safe concurrency model replaces the original fragile implementation, and the GUI is fully rebuilt with a dark theme, live results table, and persistent settings.

---

## Installation

### Prerequisites

- Python 3.8 or later
- `pip`

### Steps

1. Clone the repository:

```bash
git clone https://github.com/Jesewe/proxy-checker.git
cd proxy-checker
```

2. Install dependencies:
```bash
pip install -r requirements.txt
```

---

## Usage

### Launching

```bash
python main.py
```

The app opens on the **Settings** tab. Configure your sources and parameters, then click **▶ Start Checking**.

### Workflow

1. **Settings tab** — configure checker parameters, proxy sources, and output directory
2. Click **▶ Start Checking** — the app switches to the Log tab and begins fetching
3. As working proxies are found, the app switches to the **Live Results** tab automatically
4. After checking completes, the enrichment pass fills in anonymity tiers and country data in-place
5. Use **🔍 View Full Results** to open the filterable results dialog, or **💾 Save Log** to export the log

### Controls

| Button | Action |
| ------------------------ | -------------------------------------------------------------- |
| **▶ Start Checking** | Begin the full fetch → check → enrich → export pipeline |
| **⏸ Pause / ▶ Resume** | Suspend or continue checking with zero CPU overhead |
| **✕ Cancel** | Stop all threads and abort gracefully |
| **🔍 View Full Results** | Open filterable results dialog (available after run completes) |
| **💾 Save Log** | Save the log output to a text file |

---

## Configuration

All settings are persisted automatically between sessions.

### Checker Settings

| Setting | Description | Default |
| ---------------- | ------------------------------------------------------ | ----------------------- |
| Timeout (s) | Per-request timeout | 3 |
| Max Retries | Retry attempts for failed source fetches | 3 |
| Retry Delay (s) | Delay between retry attempts | 1.0 |
| Max Workers | Concurrent checking threads | 50 |
| Test URL | URL used to verify each proxy | `http://www.google.com` |
| User-Agent | Custom User-Agent header (optional) | — |
| Detailed Results | Enable response time, anonymity tier, and geo-location | Off |
| Export Format | Output file format: `txt`, `csv`, or `json` | `txt` |

### Output Directory

Working proxies are saved to the chosen output directory (default: `~/Documents/proxy-checker`). One file is created per proxy type (e.g. `http.txt`, `socks4.csv`). A `history.log` is appended after each run.

### Proxy Sources

The sources table lists the proxy list URLs to fetch. Each row has an enable/disable checkbox, a type label (used as the output filename), and a URL. Rows can be added or removed at runtime.

Default sources (from [TheSpeedX/PROXY-List](https://github.com/TheSpeedX/PROXY-List)):

| Type | URL |
| ------ | -------------------------------------------------------------------------- |
| http | `https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt` |
| socks4 | `https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt` |
| socks5 | `https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt` |

---

## Detailed Results Mode

When **Detailed Results** is enabled, each confirmed working proxy goes through a second enrichment pass:

- **Response time** — measured during the checking phase (millisecond precision)
- **Anonymity tier** — classified as `elite`, `anonymous`, or `transparent` via `httpbin.org/get`
- **Geo-location** — country, region, and city fetched via `ip-api.com/batch` (rate-limited automatically)

Enrichment runs concurrently after the main checking pass and updates the live results table in-place as each proxy is processed.

The **View Full Results** dialog supports filtering by maximum response time and exporting the filtered table to CSV.

---

## Troubleshooting

**Many connection errors / low working count**
Reduce Max Workers or increase Timeout. Some proxy sources have high churn; try re-running shortly after.

**Geo-location shows empty for many proxies**
`ip-api.com` has a free-tier rate limit of 45 requests/minute. The built-in rate limiter handles this automatically, but very large working sets will take longer to enrich.

**Anonymity detection shows "unknown"**
`httpbin.org` may be blocked or rate-limiting. The checker treats failed anonymity lookups as `unknown` and continues — it does not block the export.

**App starts slowly**
Client IP detection runs in the worker thread and does not block the UI. If startup feels slow, check your network connection.

**Output directory permission error**
Choose a directory your user account has write access to, or run with appropriate permissions.

---

## License

MIT License — see the [LICENSE](LICENSE) file for details.