How to Rotate Proxies in Python Using Requests

Comments: 0

When performing parsing or sending requests to a website, it is often necessary to maintain stable operation under technical limitations and possible blocking from the site’s side. One of the most effective methods for achieving this is to rotate proxies in Python. As previously discussed in the context of what proxy rotation is, this approach allows the IP address to be changed for each request or at set intervals, helping to avoid captchas and prevent exceeding resource-imposed limits. This material will explain how to implement such rotation using the popular requests library.

Proxy Rotation in Python: Step-by-Step Guide

First, a list of proxies for web scraping will be required. These can be found on free resources, though it should be understood that such intermediaries are often unreliable, slow, unstable, and prone to frequent blocking. For serious tasks, it is recommended to use solutions from verified providers. The most convenient way is to store them in a plain text file or as a Python list:


proxies = [
    'http://user:pass@proxy1.com:8080',
    'http://user:pass@proxy2.com:8080',
    'http://proxy3.com:8080',  # without authentication
]

Here is an example of proxy rotation in Python using requests. To send a request through a new IP, the proxies parameter is used in requests.get() or requests.post():


import requests
import random

proxy = random.choice(proxies)
response = requests.get('https://example.com', proxies={'http': proxy, 'https': proxy})

There are several approaches to rotation:

  1. Random selection – using random.choice().
  2. Sequential cycling – iterating through the list by index or via an iterator.
  3. Filtered selection – for example, using only working or fastest intermediaries.

Error handling must be implemented, for example, for timeouts or proxy failures. In such cases, a faulty IP can be temporarily removed from the list:


try:
    response = requests.get('https://example.com', proxies={'http': proxy, 'https': proxy}, timeout=5)
except requests.exceptions.RequestException:
    proxies.remove(proxy)

These are best practices for proxy rotation in Python, which can be easily scaled to fit any scenario. The following sections will cover practical tips, common mistakes, and how to rotate proxies in Python effectively.

Tips and Best Practices for Proxy Rotation in Python

To rotate proxies in Python for stable and efficient operation, it is important to follow several practical recommendations.

  1. Rotate not only intermediaries but also the User-Agent.

Most websites analyze not only the IP address but also browser headers. If every request is sent with the same User-Agent, it will quickly raise suspicion. Therefore, it is advisable to generate headers dynamically, for example:


headers_list = [
    {'User-Agent': 'Mozilla/5.0 ...'},
    {'User-Agent': 'Chrome/114.0 ...'},
    # add more options
]

headers = random.choice(headers_list)
response = requests.get(url, headers=headers, proxies={'http': proxy, 'https': proxy})
  1. Pass authentication data correctly.

Some IPs require a username and password. In such cases, it is better to immediately verify that the credentials are included in the URL and use the appropriate format (http://user:pass@proxy:port). Incorrect authentication is one of the most common reasons for rotation errors.

  1. Use adaptive selection logic.

Instead of blindly choosing intermediaries at random, take into account their stability history. For example, maintain simple statistics on how many requests succeeded through each IP and prioritize more stable options.

Troubleshooting Proxy Rotation Issues in Python

Such rotation is not always a smooth process. In practice, several common difficulties may arise, and here is how to address them.

  1. Connection failures and timeouts.

If a new connection IP stops responding or loads for too long, the request may hang. Always set a timeout parameter in requests.get() and handle exceptions using try/except. It is also advisable to remove one from the pool after several consecutive failures.

  1. Proxy CSRF token error.

Sometimes a launch error occurs related to a CSRF token. Possible reasons include an invalid CSRF token, loss or modification of cookies. To fix this issue, check whether cookies are allowed and ensure they are not overwritten. If secure cookies are used, they do not work with HTTP – the proxy must be configured for HTTPS.

  1. Blocking from the target site.

Even with intermediaries, a website can detect suspicious activity, which manifests as captchas, rate limits, reduced speeds, or complete IP bans. In such cases, rotation should involve not only IPs but also headers, along with introducing delays between requests (rate limiting).

Conclusion

IP rotation in Python is a fundamental yet highly important technique for stable and secure automation of requests. It allows consistent operation under restrictions and blocking, enabling the collection of required data without unnecessary obstacles.

This requires not only preparing a sufficient proxy list but also implementing well-designed logic: considering its types, handling errors, integrating User-Agent rotation, and carefully selecting a rotation strategy – whether random or adaptive.

Comments:

0 comments