Hoe gebruik je cURL met een proxy (en los je veelvoorkomende fouten op)

Laatst bijgewerkt op August 10, 2026
How cURL requests travel through a proxy
AI-samenvatting
  • Configureer cURL voor HTTP-, HTTPS- en SOCKS-proxy's met command-line flags, omgevingsvariabelen, authenticatie en veilig beheer van inloggegevens.
  • Begrijp hoe proxy-routing, HTTPS-CONNECT-tunnels en DNS-resolutie aan lokale of proxyzijde invloed hebben op requests en privacygrenzen.
  • Controleer het daadwerkelijke uitgaande pad met herhaalbare checks in plaats van aan te nemen dat een succesvolle response bewijst dat de proxy is gebruikt.
  • Diagnoseer veelvoorkomende fouten zoals 407-authenticatieproblemen, TLS-certificaatfouten, time-outs, DNS-problemen en 429 rate limits met een gelaagde troubleshooting-aanpak.
  • Pas productiewaardige werkwijzen toe voor retries, time-outs, logging en fail-closed gedrag, zodat automatisering niet stilletjes de bedoelde proxy omzeilt.

cURL draait wereldwijd naar schatting op 20 miljard installaties — het zit standaard ingebouwd in macOS, de meeste Linux-distributies en Windows 10/11. En toch: vraag tien developers hoe je een cURL-verzoek op de juiste manier via een proxy laat lopen, en je krijgt tien nét andere antwoorden, waarvan de helft stukloopt zodra authenticatie of SOCKS in beeld komt.

Precies die kloof wil ik hier dichten. De meeste handleidingen laten één commando zien, zeggen dat het werkt en gaan dan weer verder. Ze laten niet zien hoe je controleert of de proxy ook echt iets doet (spoiler: soms helemaal niet), en ze nemen je al helemaal niet mee door de foutcodes die verschijnen zodra je configuratie ook maar een beetje afwijkt van het ideale pad. Deze gids behandelt het volledige spectrum — HTTP/HTTPS-proxy's, SOCKS4/SOCKS5/socks5h, omgevingsvariabelen (en hun heel specifieke valkuilen), een degelijke troubleshooting-tabel en wat je kunt doen als cURL en een proxy het simpelweg niet meer samen redden.

Wat is cURL en waarom zou je het met een proxy gebruiken?

cURL is een command-line tool om data van en naar een URL te verplaatsen. Meer niet — geen GUI, geen franje, gewoon een programma dat HTTP, HTTPS, FTP en nog een handvol andere protocollen spreekt. De eenvoudigste aanroep ziet er zo uit:

curl https://example.com

Dat haalt de pagina op en zet de ruwe HTML in je terminal. Op zichzelf al handig, maar de echte reden dat developers en technische zakelijke gebruikers cURL pakken, is voor API-tests, datacapturing, het controleren van geo-beperkte content en het uitvoeren van requests binnen CI/CD-pipelines.

Een proxy staat tussen jouw machine en de doelserver en stuurt je verzoek namens jou door. De doelserver ziet het IP-adres van de proxy, niet dat van jou. Dat is om een aantal legitieme redenen belangrijk: testen hoe je site eruitziet vanuit een ander land, rate limits omzeilen tijdens QA, of verkeer via de verplichte corporate gateway van je bedrijf laten lopen. cURL ondersteunt het hele scala aan proxyprotocollen — HTTP, HTTPS, SOCKS4 en SOCKS5 — en de vlaggen die je in deze gids steeds terugziet zijn -x / --proxy (het proxyadres zelf), -v (uitvoer in verbose-modus, je beste vriend bij debuggen) en -k (SSL-verificatie overslaan, iets wat je buiten tests eigenlijk nooit zou moeten gebruiken).

Nog één korte opmerking voordat we verder gaan: deze gids gaat over de netwerkmechaniek van het gebruik van een proxy met cURL. Het is geen toestemming om de gebruiksvoorwaarden van een website of het beveiligingsbeleid van je organisatie te negeren. Een proxy verandert je netwerkroute — niet wat legaal of toegestaan is.

Voordat je begint

Moeilijkheidsgraad: Beginner tot gemiddeld
Benodigde tijd: ongeveer 15 minuten voor de kernvoorbeelden
Wat je nodig hebt:

  • cURL geïnstalleerd (controleer met curl --version — als je op macOS, Linux of Windows 10/11 zit, staat het er waarschijnlijk al op)
  • Proxy-gegevens van je provider: host, poort, protocol (HTTP/HTTPS/SOCKS) en indien nodig gebruikersnaam/wachtwoord
  • Een terminal (Terminal op macOS, een shell op Linux, PowerShell of CMD op Windows)

Als cURL om wat voor reden dan ook niet is geïnstalleerd, dan is het een kwestie van één regel: brew install curl op macOS via Homebrew, sudo apt install curl op Debian/Ubuntu, of sudo yum install curl op RHEL/CentOS. Op Windows wordt het meegeleverd sinds Windows 10 build 17063.

In deze gids gebruik ik voorbeeldwaarden — proxy.example:8080 voor het proxyadres en user:pwd voor de credentials. Vervang die door je eigen proxygegevens, en plak nooit echte inloggegevens in je shell history, een screenshot of een Slack-bericht. Ik heb meer gelekte proxywachtwoorden in Slack-kanalen gezien dan me lief is.

Hoe gebruik je cURL met een HTTP- of HTTPS-proxy?

Dit is de meest voorkomende configuratie, en die gebruik je voor verreweg de meeste proxytaken.

Gebruik de -x / --proxy-flag

De basisvorm ziet er zo uit:

curl -x "http://user:pwd@proxy.example:8080" "https://httpbin.org/ip"

-x en --proxy doen precies hetzelfde — kies vooral wat je zelf het makkelijkst onthoudt. Omdat HTTP cURL's standaard proxyschema is, kun je technisch gezien de http://-prefix weglaten en gewoon proxy.example:8080 schrijven. Ik zou het toch expliciet uitschrijven, want over zes maanden ben je blij met die helderheid.

Zet de volledige URL tussen dubbele aanhalingstekens. Als je wachtwoord een @, # of & bevat, dan haalt een on-gequote string je shell-invoer al uit elkaar voordat cURL het ooit ziet.

Verbinden via een HTTPS-proxy

Sommige providers versleutelen de verbinding naar de proxy zelf met TLS, niet alleen de verbinding van de proxy naar je doel. Dat is iets anders dan een HTTPS-site scrapen — het proxyprotocol en het doelprotocol zijn onafhankelijke variabelen. Zo geef je het op:

curl -x "https://user:pwd@proxy.example:8080" "https://httpbin.org/ip"

Krijg je hier een certificaatfout, weersta dan de neiging om er snel -k aan toe te voegen en door te gaan. Die vlag schakelt SSL-certificaatverificatie volledig uit, wat prima is voor een lokale test van vijf minuten maar een heel slecht idee voor alles wat productie of echte gebruikersdata raakt. Werk je met een corporate proxy die TLS onderschept (een MITM-opstelling, veelvoorkomend in enterprise-omgevingen), dan is de juiste oplossing het importeren van het CA-certificaat van de proxy, niet het uitschakelen van verificatie.

Authenticeren met --proxy-user

Je kunt credentials ook loszetten in een eigen vlag in plaats van ze in de URL te proppen:

curl -x "http://proxy.example:8080" --proxy-user "user:pwd" "https://httpbin.org/ip"

Let op: hoofdletter -U is niet hetzelfde als authenticatie voor de doelsite (-u / --user, dus kleine letters) — die door elkaar halen is een makkelijke manier om je proxywachtwoord naar de verkeerde bestemming te sturen. In zakelijke omgevingen die NTLM- of Digest-authenticatie gebruiken in plaats van Basic, voeg je --proxy-ntlm of --proxy-digest toe naast --proxy-user.

Hoe gebruik je cURL met een SOCKS-proxy: SOCKS4 vs. SOCKS5 vs. socks5h

HTTP and SOCKS proxy routing with local and remote DNS

SOCKS-proxy's werken op een lager niveau dan HTTP-proxy's — het protocol van het verkeer maakt ze niet uit, wat ze handig maakt voor niet-HTTP-verkeer, Tor-circuits en alles wat privacygevoelig is. De meeste concurrenten geven hier één commando en zijn klaar. Dat is een fout, want de verschillen tussen SOCKS4, SOCKS5 en socks5h:// doen er echt toe.

FunctieSOCKS4SOCKS5socks5h://
TCP-ondersteuningJaJaJa
UDP-ondersteuningNeeJaJa
AuthenticatieNeeJaJa
DNS-resolutie op afstandNeeNee (lokale DNS)Ja (proxy lost op)
Tor-compatibelNeeRisicovol (DNS-lek)Ja

De DNS-regel is waar mensen in de praktijk de meeste schade oplopen. Met socks5:// lost je machine de hostnaam op voordat de verbinding naar de proxy gaat — wat betekent dat je lokale DNS-resolver (en dus ook je internetprovider) precies ziet welk domein je probeert te bereiken, ook al loopt het daadwerkelijke HTTP-verkeer via de proxy. socks5h:// lost dat op door de proxy zelf de hostnaam te laten resolven, zodat lokaal niets van de bestemming lekt. Daarom hamert Tor-documentatie ook op socks5h:// — met puur socks5:// maak je een belangrijk deel van de anonimiteit van Tor ongedaan.

Zo gebruik je elke variant in cURL:

curl --socks4 "proxy.example:1080" "http://example.com"
curl -x "socks5://user:pwd@proxy.example:1080" "http://example.com"
curl -x "socks5h://user:pwd@proxy.example:1080" "http://example.com"

Tenzij je een specifieke reden hebt om dat niet te doen, kies je standaard voor socks5h://. Het kost niets extra en voorkomt een lek dat je anders waarschijnlijk nooit zou opmerken.

Proxy instellen met omgevingsvariabelen (en de valkuilen vermijden)

Bij elk commando steeds -x typen wordt al snel vermoeiend. Met omgevingsvariabelen stel je de proxy één keer per shellsessie in, waarna elke volgende cURL-aanroep die automatisch overneemt — de handleiding van cURL documenteert http_proxy, HTTPS_PROXY, ALL_PROXY en NO_PROXY als de ondersteunde set.

De basis

export http_proxy="http://user:pwd@proxy.example:8080"
export HTTPS_PROXY="http://user:pwd@proxy.example:8080"
export ALL_PROXY="socks5h://proxy.example:1080"

Hier gaat het vaak mis: de variabelenaam verwijst naar het protocol van de doel-URL, niet naar het protocol van de proxy. Dus http_proxy geldt voor requests naar http://-URL's, en HTTPS_PROXY voor requests naar https://-URL's — je kunt ze allebei naar exact dezelfde HTTP-proxy wijzen, en dat is volkomen normaal.

Omzeilen met NO_PROXY

export NO_PROXY="localhost,127.0.0.1,.internal.example"

Komma-gescheiden, en de punt aan het begin van .internal.example werkt als wildcard voor alle subdomeinen. NO_PROXY heeft voorrang op alles — zelfs als -x expliciet op de command line staat, zal een match in NO_PROXY die request langs de proxy laten gaan.

De valkuilen waar mensen echt op vastlopen

  • export vergeten. Als je alleen http_proxy=http://... typt zonder export, dan leeft de variabele alleen in je huidige shell en is die voor cURL als child process volledig onzichtbaar. Dat is in mijn ervaring verreweg de meest voorkomende oorzaak van supporttickets met de strekking: “de proxy werkt niet”.
  • Hoofdlettergevoeligheid. cURL controleert specifiek eerst op lowercase http_proxy en geeft die voorrang als beide varianten bestaan. Sommige andere tools lezen alleen uppercase. Als je debugt waarom een variabele “niet wordt opgepikt”, check dan of er een dubbele versie met afwijkende hoofdletters staat.
  • De PowerShell-aliasval. In PowerShell 5.1 roept curl helemaal geen cURL aan — het start Invoke-WebRequest, een totaal andere tool met andere flags. Krijg je op Windows rare fouten op -x, typ dan expliciet curl.exe om zeker te weten dat je echt cURL draait.
  • Verschillen in Windows-syntax. CMD gebruikt set http_proxy=...; PowerShell gebruikt $env:http_proxy = "...". Als je die door elkaar haalt tussen terminals, ben je zo een middag kwijt.
  • Verouderde variabelen. unset http_proxy en unset https_proxy wissen een dode proxyconfiguratie die ongemerkt elk request blijft omleiden — en laten falen.

Voor snel aan- en uitzetten besparen een paar aliases in je .bashrc echt tijd:

alias proxyon='export http_proxy="http://proxy.example:8080"; export https_proxy="http://proxy.example:8080"'
alias proxyoff='unset http_proxy; unset https_proxy'

cURL altijd via een proxy laten lopen (configbestand)

Als je 95% van de tijd achter een corporate proxy zit, zet een .curlrc-bestand (op Unix-achtige systemen in je thuismap) of _curlrc (op Windows, in de app-data-map) een permanente standaard zonder omgevingsvariabelen aan te raken:

proxy="http://proxy.example:8080"

Voor een losse request waarbij je de proxy wilt overslaan, overschrijft --noproxy "*" de configuratie voor precies die ene aanroep. De prioriteit is in grote lijnen: command-line flag > omgevingsvariabele > configbestand, dus -x op de command line wint altijd als er een conflict is.

Een belangrijke waarschuwing: zet geen plaintext wachtwoord in .curlrc als dat bestand ergens kan worden gesynchroniseerd, geback-upt of per ongeluk in een repo belandt. Gebruik voor CI-pipelines liever de secret manager van je platform en injecteer credentials als afgeschermde omgevingsvariabelen.

Hoe controleer je of je proxy echt werkt?

Dit is het onderdeel dat bijna elke andere gids overslaat, en precies het stuk dat je de meeste debugtijd bespaart. Een proxy instellen en er simpelweg van uitgaan dat het verkeer erdoorheen loopt, is hoe mensen uren verliezen aan een scraper die in de praktijk helemaal geen proxy gebruikte.

Methode 1: Vergelijk je uitgaande IP-adres

Doe dezelfde IP-echo-request twee keer — één keer direct, één keer via de proxy — en vergelijk de uitkomst:

curl https://httpbin.org/ip
curl -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip

Als beide commando's hetzelfde IP-adres teruggeven, doet je proxy niets. Controleer je flags, je omgevingsvariabelen of de vraag of NO_PROXY misschien per ongeluk je doel matcht.

Methode 2: Lees de verbose output

Voeg -v toe aan elk proxyverzoek en cURL toont de volledige handshake:

curl -v -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip

Zoek naar een regel als * Connected to proxy.example (xx.xx.xx.xx) port 8080, gevolgd door > CONNECT httpbin.org:443 HTTP/1.1 en uiteindelijk < HTTP/1.1 200 Connection established. Die sequentie — verbinding met de proxy, daarna een CONNECT-tunnel naar het doel — is de HTTP CONNECT-methode in actie, en precies wat er hoort te gebeuren wanneer een HTTPS-doel via een HTTP-proxy wordt gerouteerd. Verschijnt die CONNECT-regel nooit, dan wordt de proxyflag niet toegepast. Let wel op: gebruik -v alleen tijdens actief debuggen en redacteer de output voordat je die ergens deelt — in verbose-modus kunnen proxy-credentials in platte tekst worden getoond.

Methode 3: Side-by-side diff

Voor geo-tests is dit extra handig: sla beide outputs op in bestanden en vergelijk ze met diff:

curl https://httpbin.org/ip > direct.json
curl -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip > proxied.json
diff direct.json proxied.json

Als de response bodies (of headers, bij geo-beperkte content) verschillen, heb je visuele bevestiging dat de proxy je netwerkpad echt verandert — een snelle, laagdrempelige manier om twijfel weg te nemen voordat je verder duikt.

Veelvoorkomende cURL-proxyfouten oplossen

Common cURL proxy error codes and troubleshooting paths

De meeste handleidingen wuiven dit weg en noemen één keer -k. Dit onderwerp verdient een echte referentietabel.

FoutWaarschijnlijke oorzaakOplossing
curl: (7) Failed to connectVerkeerde proxyhost/-poort, of de proxy is offlineControleer het adres; test de ruwe connectiviteit met telnet host port of nc -zv host port
407 Proxy Authentication RequiredOntbrekende of onjuiste proxycredentialsVoeg --proxy-user user:pass toe; controleer of de provider NTLM/Digest/Negotiate vereist in plaats van Basic
curl: (56) Recv failure: Connection reset by peerDe proxy verbrak de verbinding halverwege de overdrachtControleer de stabiliteit van de proxy bij de provider; als het een TLS-beëindigende proxy is, verifieer dan de certificaatverwerking in plaats van die hard uit te schakelen
curl: (28) Connection timed outFirewall blokkeert, verouderde proxy of verkeerde poortDraai env | grep -i proxy om te kijken of er oude variabelen zijn blijven hangen; unset verouderde variabelen; test een directe request om de oorzaak te isoleren
CertificaatverificatiefoutNiet-vertrouwd of onderscheppend proxycertificaatGebruik de juiste CA-keten en --proxy-cacert; vermijd verificatie uitschakelen buiten een eenmalige diagnose

De universele eerste stap bij al deze problemen is -v toevoegen. Daarmee zie je precies waar de verbinding stukloopt — DNS-resolutie, TCP-connectie, TLS-handshake of de proxy-authenticatie-uitwisseling — in plaats van te moeten gokken op basis van een foutcode van drie cijfers.

Voor corporate proxies dekken --proxy-ntlm en --proxy-negotiate Windows-domeinauthenticatieschema’s af. Eén ding dat cURL echt niet native aankan: PAC-bestanden (Proxy Auto-Config-scripts die sommige bedrijven gebruiken om dynamisch proxies toe te wijzen). Gebruikt jouw organisatie zo’n bestand, dan moet je de daadwerkelijke proxyhost en -poort handmatig achterhalen — meestal via de netwerkinstellingen van je browser — omdat cURL geen ingebouwde PAC-parser heeft.

Wanneer cURL + een proxy niet genoeg is

cURL met een proxy kan statische HTML, REST API-calls en eenvoudige data-opvragingen eigenlijk prima aan. Waar het vastloopt, zijn de favoriete verdedigingslagen van het moderne web: JavaScript-gerenderde single-page apps, anti-botsystemen zoals Cloudflare of Akamai en CAPTCHA-muren. Richt je cURL op een React- of Vue-app achter zo’n laag, dan krijg je vaak alleen een lege <div id="root"></div> terug — technisch gezien een geslaagde request, praktisch gezien waardeloze data. Dat is geen cURL-bug. Het is gewoon geen browser, en het heeft ook nooit gedaan alsof.

Als je al comfortabel bent met cURL in de terminal en je loopt tegen die muur aan, dan is de logische volgende stap niet overstappen op een compleet andere toolchain — maar een laag toevoegen die rendering en structuur voor je afhandelt. Precies die kloof sluiten Thunderbit's developer tools.

ScenariocURL + ProxyThunderbit API (POST /extract)
Statische HTML-paginaWerkt perfectWerkt, en geeft ook gestructureerde data terug
JS-gerenderde SPAKrijgt lege/deels geladen HTMLrenderMode: "full" verwerkt de JavaScript
Anti-bot / CAPTCHAGeblokkeerdIngebouwde afhandeling
Gestructureerde data-outputRuwe HTML — zelf parsenJSON via je eigen schema
Batch (100+ URL's)Handmatige loop + eigen rate limitingPOST /batch/extract

Thunderbit's Open API biedt een /extract-endpoint dat schema-gebonden JSON rechtstreeks uit JavaScript-zware pagina's teruggeeft, en een /distill-endpoint voor nette Markdown-conversie — beide zijn aan te roepen vanuit exact dezelfde terminalsessie waarin je al je cURL-commando's draait. Er is ook een MCP-server voor AI-codingassistenten zoals Claude of Cursor, en een CLI (npx @thunderbit/thunderbit-cli extract <url> --schema fields.json) als je liever volledig in scripts blijft werken. Niets hiervan vervangt cURL voor de taken waar cURL goed in is — het neemt het gewoon over zodra cURL structureel niet verder kan. Wil je een breder beeld van waar AI-gestuurde extractie past ten opzichte van je eigen scraperlogica, dan gaan onze uitleg over AI web scraping en onze vergelijking van de beste AI-webscrapers daar dieper op in, en ons artikel over webscraping zonder coderen is een goede opstap als je hier instapt vanuit een business- in plaats van een engineeringhoek.

Afronding

cURL en een proxy goed met elkaar laten praten is niet moeilijk zodra je weet waar de echte foutpunten zitten — en het blijkt dat bijna geen van die punten de proxy zelf is. export vergeten. -u verwarren met -U. socks5:// gebruiken terwijl je socks5h:// bedoelde. PowerShell’s curl-alias draaien in plaats van curl.exe. Al deze fouten leveren verwarrende, generieke meldingen op die niets met je proxyprovider te maken hebben.

De gewoonte die de meeste tijd bespaart: eerst verifiëren, dan pas troubleshooten. Doe de IP-echo-check, kijk even naar de -v-output en bevestig dat de proxy überhaupt in het requestpad zit voordat je aanneemt dat er verderop iets mis is. En zodra je doel JavaScript teruggooit in plaats van nette HTML, is dat geen cURL-probleem dat je met nog meer flags oplost — het is een signaal dat je een tool nodig hebt die voor rendering gebouwd is, zoals Thunderbit's API, dat een gratis tier biedt als je zelf wilt zien hoe JSON-uitvoer verschilt van ruwe HTML.

FAQ's

Gebruikt cURL standaard een proxy?
Nee. Tenzij je http_proxy / HTTPS_PROXY-omgevingsvariabelen hebt ingesteld of een .curlrc-bestand hebt geconfigureerd, maakt cURL rechtstreeks verbinding met het doel zonder proxy.

Hoe voorkom ik dat cURL voor één request een proxy gebruikt?
Voeg --noproxy "*" toe aan dat specifieke commando. Om het voor de hele shellsessie uit te zetten, draai je unset http_proxy && unset https_proxy.

Kan ik cURL gebruiken met roterende proxies?
Ja — als je provider een roterende gateway aanbiedt (één endpoint dat per request een nieuw IP toewijst), wijs je -x gewoon naar dat gateway-adres zoals je bij elke andere proxy zou doen. Voor complexere rotatielogica tegen JS-gerenderde targets regelt een API-laag zoals Thunderbit intern de rotatie en anti-botkant, zodat jij retry-logica niet met de hand hoeft te beheren.

Waarom lekt socks5:// mijn DNS-requests, maar socks5h:// niet?
Bij socks5:// lost je lokale machine de bestemmingshostnaam op voordat het verbindingsverzoek naar de proxy gaat — daardoor ziet de DNS-resolver van je ISP het domein dat je bezoekt. socks5h:// verplaatst die hostnaamresolutie naar de proxy zelf, zodat lokaal niets over de bestemming zichtbaar is.

Is het legaal om cURL met een proxy te gebruiken?
Het gebruik van een proxy is in de meeste rechtsgebieden op zichzelf legaal. Waar het om draait, is wat je ermee doet — respecteer altijd de gebruiksvoorwaarden van de doelsite, robots.txt waar van toepassing, en alle relevante wetgeving rond gegevensprivacy. Deze gids behandelt alleen de technische kant, niet een juridische vrijbrief voor een specifieke use case.

Meer weten

Ke
Ke
CTO bij Thunderbit | Senior Data Scientist & ML-expert Met bijna tien jaar ervaring in machine learning en data science is Ke Shen alumnus van Columbia University en voormalig Senior Data Scientist bij Walmart Labs. Met diepgaande, door vakgenoten erkende expertise in Python, R, Java en statistiek deelt hij praktijkgerichte inzichten over hoe je complexe AI-algoritmen van theorie naar productieklare architectuur brengt.
Topics
cURL proxySOCKS5 proxyProxyproblemen oplossen
Inhoudsopgave
Thunderbit · AI-webdata-agent

Gegevens extraheren van elke pagina in 1 klik

Vertrouwd door meer dan 250.000 gebruikers
gratis abonnement beschikbaar
Van webpagina naar spreadsheet
Beschrijf wat je nodig hebt — Thunderbit's AI Agent scrapt het en exporteert het naar Excel, Google Sheets, Airtable of Notion. Gratis om te starten.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week