Proxy rotatie is een lapmiddel, geen oplossing. De meeste scraping-operaties mislukken omdat ze IP-adressen behandelen als het enige signaal dat anti-bot systemen meten. De realiteit is dat moderne botmanagers — Akamai Bot Manager, Cloudflare Turnstile, Datadome — veel meer vingerafdrukken nemen dan alleen je bron-IP. Een roterende pool van gratis openbare proxies levert je bijna niets op tegen die systemen, en maakt het vaak erger.
De Illusie van IP-rotatie
Wanneer je IP's roteert bij elk verzoek, kondig je jezelf aan als scraper. Menselijke surfpatronen tonen sticky sessies — een enkel IP gedurende minuten of uren, consistente browser vingerafdrukken en voorspelbare verzoekintervallen. Tools zoals requests met een Session object en een roterende proxylijst breken al die signalen. Akamai's X-Akamai-Device-Fingerprint header en Cloudflare's cf-request-id correlatie kunnen verzoeken van verschillende IP's koppelen wanneer TLS-parameters, HTTP/2-instellingen en timing identiek blijven. Datadome's JavaScript-challenge controleert op headless browser-artefacten die proxywijzigingen overleven. IP's roteren zonder de volledige client-vingerafdruk te roteren is als het vervangen van je kentekenplaat maar dezelfde auto blijven rijden — de tolhuisjes markeren je nog steeds.
Voor scraping met laag tempo en laag volume tegen sites die alleen eenvoudige IP-gebaseerde snelheidsbeperking gebruiken (bijv. een limiet van 10 verzoeken per minuut zonder JavaScript-uitdagingen), volstaat vaak een enkel residentieel IP. Ik heb jarenlang scrapers laten draaien tegen overheidsdataportalen en openbare API's met één statisch IP en een beleefde time.sleep(2). Geen proxy nodig. De regel is simpel: als de site geen challenge-pagina of CAPTCHA toont na 50 verzoeken, heb je geen rotatie nodig.
Voorbij het IP-adres: Fingerprinting
Anti-bot systemen verzamelen nu tientallen signalen per verzoek. De User-Agent string is triviaal te vervalsen, maar de volgorde van Accept-Language, Sec-CH-UA, Connection en Accept-Encoding niet. Nog belangrijker: TLS fingerprinting — gestandaardiseerd in de JA3-hash (zie JA3) — identificeert de clientbibliotheek aan de hand van de ciphersuite-volgorde en TLS-extensielijst. Python's requests bibliotheek (via urllib3) produceert een JA3-hash die verschilt van Chrome 124. Cloudflare's Turnstile en Datadome controleren beide JA3. IP's roteren terwijl dezelfde TLS-stack behouden blijft, laat elk verzoek eruitzien als dezelfde geautomatiseerde client, die alleen tussen exit-nodes springt. Gratis proxies verergeren dit omdat ze vaak verouderde OpenSSL-versies draaien of bot-achtige TLS-configuraties gebruiken die al op de zwarte lijst staan.
HTTP/2 fingerprinting gaat verder. Het SETTINGS frame, window update-waarden en stream concurrency-parameters vormen een unieke “HTTP/2-vingerafdruk” die Akamai's Bot Manager over sessies heen volgt. Een roterende proxypool die niet ook de HTTP/2-implementatie roteert, is triviaal te clusteren. De enige manier om deze controles te omzeilen is het gebruik van een echte browser-engine (Puppeteer, Playwright) of een zorgvuldig opgebouwde TLS/HTTP-stack die een specifieke browserversie nabootst — en zelfs dan moet je dezelfde vingerafdruk behouden over verzoeken van een bepaalde sessie.
De Economie van Gratis Openbare Proxypools
Gratis openbare proxylijsten hebben in mijn tests een faalpercentage van 60–80 procent. De meeste proxies zijn ofwel dood bij aankomst, worden beperkt door de host, of zijn al gemarkeerd door grote botmanagers. De gemiddelde levensduur van een gratis SOCKS5-proxy die uit een openbare directory is geschraapt, is minder dan 15 minuten. Het onderhouden van een roterende pool van 500 proxies betekent dat je duizenden IP's per uur verbruikt, en 80% van je verzoeken time-out of geven een 403 terug. De bandbreedte is onbetrouwbaar, latentiepieken komen vaak voor, en veel gratis proxies injecteren advertenties of wijzigen de responslichamen. Betaalde residentiële proxynetwerken (bijv. Bright Data, Oxylabs) bieden succespercentages van 95%+ en sticky sessie-opties, maar tegen een kostprijs van $10–$20 per GB. Op schaal gezien zijn residentiële proxies alleen voordelig wanneer je IP-gebaseerde blokkades op hoogwaardige doelen moet omzeilen. Voor al het andere presteert een enkel schoon IP met een juiste verzoekstempo beter dan een chaotische gratis pool.
Wanneer Rotatie Echt Werkt
Proxy rotatie is effectief tegen één specifieke dreiging: IP-gebaseerde snelheidslimieten die per IP worden gereset. Als een site een eenvoudige X-Forwarded-For controle of een token bucket per IP gebruikt, omzeilt rotatie na elk verzoek de limiet. Dit komt veel voor bij kleinere e-commerce sites en legacy API's die hun botdetectie nooit hebben bijgewerkt. In die gevallen werkt zelfs een gratis proxypool — maar alleen als je een retry-logica implementeert die mislukte proxies weggooit en snel door nieuwe fietst.
Hier is een minimaal Python-voorbeeld met requests en een retry-met-rotatie lus. Het gaat uit van een lijst met proxy-URL's in proxy_list en een doel-url:
import requests
from itertools import cycle
proxy_pool = cycle(proxy_list)
max_retries = 5
for attempt in range(max_retries):
proxy = next(proxy_pool)
try:
resp = requests.get(
url,
proxies={"http": proxy, "https": proxy},
timeout=10,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."}
)
if resp.status_code == 200:
break
except (requests.ConnectionError, requests.Timeout):
continue
else:
raise RuntimeError("All proxies failed")
Dit patroon werkt alleen wanneer de detectie van de site puur IP-gebaseerd is. Voeg een time.sleep(random.uniform(1,3)) toe tussen verzoeken om menselijke timing na te bootsen. Voor sites die Turnstile of Datadome gebruiken, zal deze code elke keer falen — de challenge-pagina geeft een 403 of een CAPTCHA terug, ongeacht de proxy. In die gevallen heb je een headless browser met een echte vingerafdruk nodig, geen roterende IP-lijst.
Sticky sessies — hetzelfde IP behouden voor een reeks gerelateerde verzoeken — zijn vaak effectiever dan rotatie per verzoek. Veel e-commerce sites verwachten een enkel IP voor een surfsessie (bijv. items toevoegen aan een winkelwagen, afrekenen). Roteren halverwege een sessie activeert fraudevlaggen. Gebruik een pool van proxies maar wijs één IP per sessie toe, niet per verzoek. Gratis proxies ondersteunen zelden sticky sessies omdat hetzelfde IP door meerdere gebruikers wordt hergebruikt; je ziet cross-contaminatie van sessiegegevens. Betaalde residentiële proxies bieden sticky sessie-duren (5–30 minuten) die aansluiten bij natuurlijk surfgedrag.
Kies alleen voor rotatie wanneer je de detectiestack van het doelwit begrijpt. Test eerst met een enkel IP. Voeg alleen rotatie toe als je een snelheidslimiet tegenkomt. En vertrouw nooit op gratis proxies voor productie — hun faalpercentage kost je meer aan ontwikkelingstijd en verloren data dan een goedkoop residentieel abonnement.