IP rotation spreads your traffic across many addresses so that no single one sends enough to trip a site's per-IP limits. It can happen in two places:
- At the provider. A rotating proxy gives you a new exit per request or per connection behind one gateway address.
- In your code. You hold a list of static proxies and choose one for each request yourself.
Rotating a list yourself
Round-robin is the simplest strategy:
from itertools import cycle
import requests
proxies = cycle([
"http://USERNAME:PASSWORD@IP1:PORT",
"http://USERNAME:PASSWORD@IP2:PORT",
])
for url in urls:
proxy = next(proxies)
requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
Real jobs add random choice, health checks that bench a failing IP for a while, and per-IP pacing. How to rotate proxies in Python builds each of those, including an asyncio version.
When rotation hurts
Rotation suits independent requests: product pages, search results, public listings. It breaks anything with state. A login, cart or multi-step form that sees the address change mid-flow reads it as a hijacked session. For those, hold one address with a sticky session or a static IP.
On ProxyHive
Residential is a rotating pool. ISP and datacenter IPs are static, one endpoint per IP, so if you buy several you rotate across them in your own code as above. Rotating vs static proxies covers which fits which job.
Common confusion
Rotation spreads per-IP limits; it does not reset limits tied to your account, cookies or fingerprint. If blocks follow you across fresh IPs, the IP is not what the site is counting.