Product
Pricing
arrow
Get Proxies
arrow
Use Cases
arrow
Locations
arrow
Help Center
arrow
Program
arrow
pyproxy
Email
pyproxy
Enterprise Service
menu
pyproxy
Email
pyproxy
Enterprise Service
Submit
pyproxy Basic information
pyproxy Waiting for a reply
Your form has been submitted. We'll contact you in 24 hours.
Close
Home/ Blog/ How to batch verify proxy availability in free proxy list using Python script?

How to batch verify proxy availability in free proxy list using Python script?

PYPROXY PYPROXY · Jun 19, 2025

In today's digital world, the use of proxy servers has become increasingly prevalent. They are used to enhance online privacy, scrape websites, or bypass geo-restrictions. However, not all proxies are reliable. Free proxy lists often contain many invalid or slow proxies. In this article, we will discuss how to use a Python script to batch validate the availability of proxies from these lists. The process involves checking the working status of each proxy, ensuring its functionality, and categorizing them based on their availability. This method allows you to save time and resources by filtering out the unusable proxies from the free proxy lists.

Understanding the Importance of Validating Proxies

Before diving into the code, it's essential to understand why validating proxies is necessary. When you obtain free proxies from public sources, they can be unreliable for several reasons:

1. Limited Lifetime: Free proxies may stop working at any time.

2. Low Speed: They might have high latency, leading to slow responses.

3. Blocking: Websites can detect and block requests from known proxy ips.

4. Security Risks: Some proxies may compromise user data by logging traffic.

To ensure the reliability of the proxies you plan to use, validating their availability is critical.

Setting Up the Environment for Proxy Validation

To begin validating proxies using Python, you'll need to set up the environment. This process involves installing necessary libraries, such as `requests` and `threading`. These libraries will allow you to send HTTP requests to the proxy servers and manage parallel requests for faster validation.

1. Install Required Libraries:

First, you need to install the `requests` and `threading` libraries. If you haven’t installed them yet, you can do so using pip:

```

pip install requests

```

2. Import Libraries:

In your Python script, start by importing the required libraries:

```python

import requests

import threading

```

Step-by-Step Process of Proxy Validation

Now that the environment is ready, let’s walk through the process of validating proxies in bulk.

1. Fetching the Proxy List

The first step in the script is to fetch the proxy list. This list can be sourced from any free proxy service. Ensure the list is formatted properly, ideally with IP addresses and ports of the proxies. For example:

```

123.45.67.89:8080

234.56.78.90:3128

...

```

You can either manually provide the list or automate its fetching process from a website.

2. Testing Each Proxy's Availability

Once you have the list, the next step is to validate each proxy. To do this, we need to send HTTP requests through each proxy and check if the response is successful. A common method is to use the `requests` library in Python to make GET requests to a known URL.

Here’s an example of how to test a proxy:

```python

def test_proxy(proxy):

url = "http://httpbin.org/ip" A simple URL to test proxies

try:

response = requests.get(url, proxies={"http": f"http://{proxy}"}, timeout=5)

if response.status_code == 200:

print(f"Proxy {proxy} is working!")

else:

print(f"Proxy {proxy} failed with status code {response.status_code}")

except requests.RequestException as e:

print(f"Proxy {proxy} failed: {e}")

```

This code sends a request to `httpbin.org` to test if the proxy can make successful requests. If the proxy is functional, it will return a 200 status code.

3. Parallelizing the Proxy Validation

Validating proxies one by one can be slow, especially if you have hundreds of proxies to check. To speed up the process, you can use Python’s `threading` module to run multiple proxy validations in parallel.

Here’s how you can modify the validation function to use threading:

```python

def validate_proxies(proxy_list):

threads = []

for proxy in proxy_list:

thread = threading.Thread(target=test_proxy, args=(proxy,))

threads.append(thread)

thread.start()

for thread in threads:

thread.join()

```

In this function, each proxy is tested in a separate thread, allowing multiple proxies to be checked simultaneously, significantly reducing the time it takes to validate all proxies.

4. Handling Proxy Types

Proxies come in various types, including HTTP, HTTPS, and SOCKS proxies. Depending on the proxy type, you may need to adjust the validation code. For instance, if you are working with SOCKS proxies, you’ll need to use a library like `PySocks`.

You can modify the proxy validation to accommodate different types by checking the proxy’s protocol and adjusting the request accordingly:

```python

def test_proxy(proxy):

url = "http://httpbin.org/ip"

proxy_type = "http" if "https" not in proxy else "https"

try:

response = requests.get(url, proxies={proxy_type: f"{proxy_type}://{proxy}"}, timeout=5)

if response.status_code == 200:

print(f"Proxy {proxy} is working!")

else:

print(f"Proxy {proxy} failed with status code {response.status_code}")

except requests.RequestException as e:

print(f"Proxy {proxy} failed: {e}")

```

This code dynamically adjusts the proxy type (HTTP or HTTPS) based on the proxy address format.

5. Handling Proxy Rotation

In some cases, you may want to rotate proxies to avoid overloading a single proxy or to bypass rate-limiting mechanisms. You can implement a proxy rotation system by randomly selecting a proxy from your list before each request:

```python

import random

def get_random_proxy(proxy_list):

return random.choice(proxy_list)

def test_proxy_with_rotation(proxy_list):

proxy = get_random_proxy(proxy_list)

url = "http://httpbin.org/ip"

try:

response = requests.get(url, proxies={"http": f"http://{proxy}"}, timeout=5)

if response.status_code == 200:

print(f"Proxy {proxy} is working!")

else:

print(f"Proxy {proxy} failed with status code {response.status_code}")

except requests.RequestException as e:

print(f"Proxy {proxy} failed: {e}")

```

This ensures that your requests are spread across multiple proxies, minimizing the risk of getting blocked.

6. Logging Results and Output

After validating the proxies, it’s essential to log the results so you can easily identify which proxies are working and which are not. You can save the results in a file or print them to the console:

```python

def log_results(proxy, status):

with open("proxy_results.txt", "a") as file:

file.write(f"{proxy}: {status}n")

def test_proxy_and_log(proxy):

url = "http://httpbin.org/ip"

try:

response = requests.get(url, proxies={"http": f"http://{proxy}"}, timeout=5)

status = "working" if response.status_code == 200 else "failed"

log_results(proxy, status)

except requests.RequestException as e:

log_results(proxy, f"failed: {e}")

```

This code logs the status of each proxy, allowing you to review the results later.

Conclusion

Validating proxies in bulk can significantly improve the efficiency of using free proxy lists. By following the steps outlined in this article, you can create a Python script that checks proxies’ availability, handles different proxy types, and speeds up the process using threading. Additionally, implementing proxy rotation and logging results helps you maintain a clean and effective proxy list. With these techniques, you can ensure that your proxies are reliable and ready for use in your projects.

Related Posts

Clicky