---
title: "Como rotacionar proxies em Python: guia com código"
description: "Por que um IP fixo esbarra nos limites de requisição ao fazer scraping e como alternar proxies em Python com Requests, em ordem ou aleatoriamente."
url: https://proxynet.io/pt-br/blog/how-to-rotate-proxies-in-python
date: 2025-02-06
author: "Acar Diveroli"
category: "Tutoriais, Proxy 101"
lang: pt-BR
---

# Como rotacionar proxies em Python: guia com código

Quem dispara muitas requisições a partir do Python não vai longe com um único endereço. Este artigo mostra como alternar uma lista de proxies dentro do código.

Um proxy esconde o seu endereço, mas se ele manda todas as requisições seguidas pelo mesmo IP, o limite de requisições do site de destino entra em ação. Esse é o problema de fundo: não é o endereço que é detectado, é o padrão. Se você não usa um [Proxies rotativos](https://proxynet.io/pt-br/rotating-proxy) e sim a sua própria lista de endereços fixos, quem faz a troca é o seu código.

## O que é rotação de IP

Rotacionar o IP significa mudar continuamente o endereço das requisições de saída: depois de cada requisição, em intervalos fixos ou quando você decidir. Em vez de mandar tudo pelo mesmo IP, você distribui entre vários.

Com os [Proxies residenciais](https://proxynet.io/pt-br/residential-proxy) isso já acontece dentro do próprio serviço. Quem tem a sua lista e não quer pagar por volume monta a rotação por conta própria: é disso que trata este artigo.

## Passo 1: requisitos

- [Python 3](https://www.python.org/downloads/)
- o ambiente de desenvolvimento que você preferir
- a biblioteca Requests como cliente HTTP:

```bash
pip3 install requests
```

## Passo 2: obtenha os proxies

Você precisa de uma lista de endereços. No painel da Proxynet, escolha a localização adequada ao site de destino e decida entre [Proxies IPv4](https://proxynet.io/pt-br/ipv4) e [Proxies IPv6](https://proxynet.io/pt-br/ipv6).

## Passo 3: uma requisição sem proxy

Como referência, primeiro uma requisição pela sua própria conexão:

```python
# pip3 install requests
import requests

# send a request to the test endpoint
response = requests.get("https://httpbin.io/ip")

if response.status_code != 200:
    print(f"The request failed with {response.status_code}")
else:
    print(response.text)
```

A saída mostra o seu próprio endereço. Anote-o: é a referência para o passo seguinte.

## Passo 4: a mesma requisição por um proxy

O Requests recebe os proxies como um dicionário, com uma entrada para HTTP e outra para HTTPS:

```python
# pip3 install requests
import requests

# specify the proxy server address
proxies = {
    "http": "http://proxy.proxynet.io:60001",
    "https": "http://proxy.proxynet.io:60001",
}

response = requests.get(
    "https://httpbin.io/ip",
    proxies=proxies,
)

if response.status_code != 200:
    print(f"The request failed with {response.status_code}")
else:
    print(response.text)
```

Se agora a saída mostrar um endereço diferente do anterior, a requisição está saindo pelo proxy.

## Passo 5: rotacionar a lista

Guarde seus proxies, um por linha, em um arquivo como `proxies_list.txt`:

```
proxy.proxynet.io:60001
proxy.proxynet.io:60002
```

Para alternar há dois caminhos.

### Em ordem

Ir em ordem distribui a carga por igual, o que ajuda com uma lista pequena para que nenhum endereço carregue todo o trabalho. O porém: a sequência é regular, e um servidor atento reconhece justamente aí um padrão.

```python
# pip3 install requests
import requests
from itertools import cycle

# read the proxies from the proxy list file
proxies_list = open("proxies_list.txt", "r").read().strip().split("\n")

# create a proxy generator
proxy_pool = cycle(proxies_list)

for _ in range(4):
    proxy = next(proxy_pool)

    proxies = {
        "http": f"http://{proxy}",
        "https": f"http://{proxy}",
    }

    response = requests.get(
        "https://httpbin.io/ip",
        proxies=proxies,
    )

    if response.status_code != 200:
        print(f"The request failed with {response.status_code}")
    else:
        print(response.text)
```

### Aleatoriamente

O acaso quebra o padrão. Em troca, um endereço pode ser sorteado mais vezes que os outros:

```python
# pip3 install requests
import requests
import random

# read the proxies from the proxy list file
proxies_list = open("proxies_list.txt", "r").read().strip().split("\n")

for _ in range(4):
    random_proxy = random.choice(proxies_list)

    proxies = {
        "http": f"http://{random_proxy}",
        "https": f"http://{random_proxy}",
    }

    response = requests.get(
        "https://httpbin.io/ip",
        proxies=proxies,
    )

    if response.status_code != 200:
        print(f"The request failed with {response.status_code}")
    else:
        print(response.text)
```

## Não mude só o IP

O endereço é apenas uma característica entre várias. Se o User-Agent for o mesmo em todas as requisições, a combinação entrega o bot mesmo com o IP mudando. Troque-o também a cada requisição — na mão ou com uma biblioteca como `fake-useragent` — e deixe entre as requisições uma pausa curta e irregular.

## Conclusão

O Python se presta bem ao scraping, e a rotação sobre uma lista própria se monta com o Requests em poucas linhas. Se a lista ficar curta ou administrá-la virar um peso, um [Proxies rotativos](https://proxynet.io/pt-br/rotating-proxy) faz o mesmo trabalho do lado do serviço.
