How to Set Up Proxies with Python Requests (Configuration Tutorial)

Using proxies is essential for any Python web scraping or automation project. Proxies help you bypass IP blocks, circumvent geographic restrictions, and prevent target websites from identifying your requests.

The Python Requests library provides a simple way to integrate proxies into your scripts. This comprehensive guide will teach you how to configure and rotate proxies in Python Requests on Windows, MacOS, and Linux.

Why Proxies are Essential for Web Scraping

Here are some key reasons why proxies are indispensable for Python scraping and automation scripts:

  • Avoid IP blocks – Target sites blacklist IPs with excessive requests. Proxies rotate your IP address to prevent this.
  • Overcome geographic blocks – Sites like Hulu restrict content based on location. Proxies provide IPs from different geographic regions.
  • Scrape anonymously – Your requests appear to come from the proxy server's IP, not your actual public IP. This prevents the target site from identifying and blocking you.
  • Improve performance – Multi-threaded scrapes run faster by distributing requests across multiple proxies.
  • Bypass anti-scraping measures – Proxies help circumvent defensive code like CAPTCHAs and rate limiting.

As your scraping needs grow, proxies become vital to scale up requests efficiently while avoiding detection.

Introduction to Python Requests

The Requests library provides an intuitive HTTP API for Python that's far simpler than the built-in urllib module. Here's a basic GET request:

import requests

response = requests.get('')

Adding proxy support takes just 1 extra line. This simplicity makes Requests ideal for web scraping.

import requests

proxies = {
  'http': '',
  'https': '',

response = requests.get('', proxies=proxies)

We'll explore more examples of proxy integration throughout this guide. First, let's look at popular proxy providers.

4 Leading Proxy Providers

There are dozens of proxy services, but these 4 providers offer a reliable global proxy network suitable for web scraping at scale:


BrightData is one of the largest proxy networks with 72 million IPs in 195 countries. It offers automatic rotation of residential IPs from different locations.

Plans start at $500/month for 1 million requests which can be scaled up as needed. BrightData also provides comprehensive analytics like success rate, response time, bans etc.


Smartproxy has a pool of over 55 million residential proxies. It supports an unlimited number of IP address rotations.

Pricing starts at $14/month for 1 million requests. Smartproxy offers features like sticky sessions, static residential IPs, and integrations with tools like Scrapy.


Proxy-Seller provides affordable residential proxies starting at $10/month for 1GB of traffic. It also offers dedicated static proxies where you get access to the same IP addresses.

The static proxies help mimic organic browsing behavior compared to constantly changing IPs. Proxy-Seller has proxy locations in 220 countries.


Soax sells premium unlimited residential proxies ideal for web scraping. Proxies will cost $99/month providing completely random IP rotation.

Soax provides dedicated IPs from locations like United States, United Kingdom, Canada, France, and Germany.

Signing Up for Proxies

Once you pick a suitable proxy provider, you'll need to create an account and get your proxy credentials:

  1. Visit the provider's website and click on Sign Up or Pricing to choose a package.
  2. Select a plan based on your monthly usage needs and enter payment details.
  3. Confirm your email to complete the signup process.
  4. Note down the credentials – hostname/IP, username, password, ports – for your purchased proxies.

Different providers use varied authentication mechanisms for proxies. For example:

  • Username/password in URL – http://USERNAME:PASSWORD@PROXY:PORT
  • IP authorization – Allow your IP instead of credentials

Test out the proxies before using them at scale. Now let's configure them in Python Requests.

Setting Proxy in Python Requests

Here is sample code to route your Requests through a proxy server:

import requests


proxies = {
  'http': proxy,
  'https': proxy

response = requests.get('', proxies=proxies)

We simply pass the proxies dict to the proxies parameter of Requests. This replaces your IP with the proxy for that HTTP session.

You can also load proxies from a text file:

proxies = []

with open('proxies.txt') as f:
  proxies =
# Pick random proxy  
proxy = random.choice(proxies)

response = requests.get(url, proxies={'http': proxy})

Rotating Proxy IPs

To avoid getting blocked, you should rotate proxy IPs for each request:

Random proxy rotation

import requests
import random

proxies = ['http://ip1', 'http://ip2', 'http://ip3']

for i in range(10):
  proxy = random.choice(proxies)
  response = requests.get(url, proxies={'http': proxy})

Round-robin proxy rotation

import requests

proxy_list = ['http://ip1', 'http://ip2', 'http://ip3']

for i in range(len(proxy_list)):
  proxy = proxy_list[i % len(proxy_list)]
  response = requests.get(url, proxies={'http':proxy})

Sticky sessions

import requests

proxies = ['http://ip1', 'http://ip2', 'http://ip3']
proxy = random.choice(proxies)

for i in range(10):
  response = requests.get(url, proxies={'http':proxy})

Here we pick one random proxy and reuse it across requests to mimic organic browsing behavior.

The key is to have a large pool of proxies and use a variety of rotation patterns.

Troubleshooting Common Proxy Errors

Here are some common proxy errors and fixes:

  • 407 Authentication Required – Invalid username/password. Double check your credentials.
  • 403 Forbidden – IP not whitelisted for proxy. Use proxy provider's dashboard to allow your IP.
  • Connection timed out – Server isn't reachable. Check proxy URL and confirm network connectivity.
  • Too many redirects – Site blocks proxy IP. Rotate to new proxy.
  • CAPTCHAs – Proxy IP is flagged. Get new residential IPs from provider.
  • High latency – Slow proxy server. Exclude it from your proxy pool.
  • Blocked at beginning – Site blocks entire subnet. Get proxies from different subnet.

Residential Proxies vs Datacenter Proxies

Residential proxies originate from home or mobile networks. They provide better anonymity but limited control:

  • Randomly rotated IP addresses from diverse locations
  • No ability to select specific IPs
  • Unpredictable performance and uptime
  • Shared among multiple users

Datacenter proxies come from dedicated servers in datacenters. They offer predictable performance and more control:

  • Choose and reuse specific static IP addresses
  • Guaranteed network uptime and bandwidth
  • Dedicated to your account only
  • Limited anonymity since IPs come from known proxies

Optimizing Proxy Pools

Carefully manage your pool of proxy IPs:

  • Large pool size – Have at least 3-4x more IPs than needed to allow sufficient rotation.
  • Frequent refresh – Ask provider to keep replacing banned IPs with new ones.
  • Geographic distribution – Mix of IPs from different countries and subnets.
  • Maintain logs – Track proxy performance over time. Exclude ones that get blocked often.
  • Have backups – Secondary pool in case primary pool gets exhausted due to blocks.

Automating Proxy Management

Manually setting proxies in code can be cumbersome. Use tools like Proxy Manager to automate:

  • Fetch proxy lists from multiple providers
  • Local storage and backup of proxies
  • Automatic validation, ranking and filtering of proxies
  • Seamless integration with Python, Selenium, scrapy and more

These tools help take care of proxy maintenance so you can focus on your scraping bots.

Advanced Proxy Techniques and Tools

  • Backconnect rotating proxies – Rotate IP for each new connection via ISPs.
  • SOCKS proxies – Route traffic through SOCKS protocol for added anonymity.
  • Multi-hop proxies – Chain together multiple proxies for obscurity.
  • Scraper API – Cloud scraping platform with integrated proxies, browsers, and CAPTCHA solvers.
  • Selenium proxies – Tools to integrate proxies into browser automation frameworks like Selenium.
  • Bandwidth throttling – Limit per proxy bandwidth usage to avoid getting banned.


Carefully configured proxies are invaluable for gathering data at scale while avoiding headaches like CAPTCHAs or IP blocks. This comprehensive guide provided you expert techniques to integrate proxies into your Python requests.

The key takeaways are using a diverse pool, frequently rotating IPs, troubleshooting issues, blending different proxy types, and leveraging tools to simplify proxy operations. Proxies might seem complex at first but become a lifesaver once you master them.

John Rooney

John Rooney

John Watson Rooney, a self-taught Python developer and content creator with a focus on web scraping, APIs, and automation. I love sharing my knowledge and expertise through my YouTube channel, My channel caters to all levels of developers, from beginners looking to get started in web scraping to experienced programmers seeking to advance their skills with modern techniques. I have worked in the e-commerce sector for many years, gaining extensive real-world experience in data handling, API integrations, and project management. I am passionate about teaching others and simplifying complex concepts to make them more accessible to a wider audience. In addition to my YouTube channel, I also maintain a personal website where I share my coding projects and other related content.

We will be happy to hear your thoughts

      Leave a reply

      Compare items
      • Total (0)