Jak používat cURL s proxy (a vyřešit běžné chyby)

Naposledy aktualizováno August 10, 2026
How cURL requests travel through a proxy
AI shrnutí
  • Nakonfigurujte cURL pro HTTP, HTTPS a SOCKS proxy pomocí přepínačů v příkazové řádce, proměnných prostředí, autentizace a bezpečného zacházení s přihlašovacími údaji.
  • Pochopte, jak směrování přes proxy, tunely HTTP CONNECT a lokální versus proxy DNS rozlišení ovlivňují požadavky i hranice soukromí.
  • Ověřujte skutečnou odchozí cestu opakovatelnými kontrolami, místo abyste předpokládali, že úspěšná odpověď znamená použití proxy.
  • Diagnostikujte běžné problémy, jako jsou chyby 407, potíže s TLS certifikáty, časové limity, DNS problémy a rate limit 429, pomocí postupného workflow pro řešení problémů.
  • Používejte produkční postupy pro retry, timeouty, logování a fail-closed chování, aby automatizace tiše neobcházela zamýšlenou proxy.

cURL běží zhruba na 20 miliardách instalací po celém světě — je součástí macOS, většiny linuxových distribucí a ve výchozím nastavení také Windows 10/11. A přesto když se deset vývojářů zeptáte, jak správně směrovat požadavek cURL přes cURL proxy, dostanete deset mírně odlišných odpovědí, z nichž polovina přestane fungovat ve chvíli, kdy do hry vstoupí autentizace nebo SOCKS.

Právě tuhle mezeru chci tady zaplnit. Většina návodů ukáže jeden příkaz, řekne, že funguje, a jde dál. Neukáže vám, jak ověřit, že proxy skutečně něco dělá (spoiler: někdy nedělá), a už vůbec vás neprovedou chybovými kódy, které se objeví hned ve chvíli, kdy se vaše nastavení byť jen trochu odchýlí od ideálního scénáře. Tento průvodce pokrývá vše podstatné — HTTP/HTTPS proxy, SOCKS4/SOCKS5/socks5h, proměnné prostředí (a jejich velmi specifické nástrahy), přehlednou tabulku pro řešení problémů i situace, kdy cURL a proxy už prostě nestačí.

Co je cURL a proč ho používat s proxy?

cURL je nástroj pro příkazovou řádku, který slouží k přenosu dat z a do URL. Nic víc — žádné GUI, žádné zbytečnosti, jen program, který umí mluvit HTTP, HTTPS, FTP a několika dalšími protokoly. Nejjednodušší použití vypadá takto:

curl https://example.com

Tímto příkazem stáhnete stránku a vypíšete syrové HTML do terminálu. To samo o sobě je užitečné, ale skutečný důvod, proč po cURL sahají vývojáři a techničtí business uživatelé, je testování API, sběr dat, kontrola geograficky omezeného obsahu a spouštění požadavků v CI/CD pipeline.

Proxy stojí mezi vaším počítačem a cílovým serverem a předává požadavek vaším jménem. Cílový server vidí IP proxy, ne vaši vlastní. To je důležité z řady legitimních důvodů: testování, jak web vypadá z jiné země, obcházení rate limitů během QA nebo směrování provozu přes firemní gateway, kterou vaše organizace vyžaduje. cURL podporuje celé spektrum proxy protokolů — HTTP, HTTPS, SOCKS4 i SOCKS5 — a v tomhle průvodci budete opakovaně vídat přepínače -x / --proxy (adresa proxy), -v (podrobný výstup, váš nejlepší parťák pro debugování) a -k (vypne ověřování SSL, což byste mimo testování prakticky nikdy používat neměli).

Ještě krátká poznámka, než půjdeme dál: tenhle průvodce je o síťové mechanice práce s proxy v cURL. Neznamená to, že můžete ignorovat podmínky používání cílového webu nebo bezpečnostní pravidla vaší organizace. Proxy mění síťovou cestu — nemění to, co je legální nebo povolené.

Než začnete

Obtížnost: Začátečník až mírně pokročilý
Časová náročnost: přibližně 15 minut na projití hlavních příkladů
Co budete potřebovat:

  • nainstalovaný cURL (ověříte příkazem curl --version — na macOS, Linuxu nebo Windows 10/11 už tam s největší pravděpodobností je)
  • přihlašovací údaje k proxy od poskytovatele: host, port, protokol (HTTP/HTTPS/SOCKS) a případně uživatelské jméno a heslo
  • terminál (Terminal na macOS, jakýkoli shell na Linuxu, PowerShell nebo CMD na Windows)

Pokud cURL z nějakého důvodu nainstalovaný není, je to otázka jednoho příkazu: brew install curl na macOS přes Homebrew, sudo apt install curl na Debianu/Ubuntu nebo sudo yum install curl na RHEL/CentOS. Ve Windows je součástí systému od buildu 17063 ve Windows 10.

V celém článku budu používat zástupné hodnoty — proxy.example:8080 pro adresu proxy a user:pwd pro přihlašovací údaje. Vyměňte je za skutečné údaje své proxy a nikdy nevkládejte reálné přihlašovací údaje do historie shellu, na screenshot nebo do Slacku. Proxy hesel uniklých ve Slack kanálech jsem už viděl víc, než bych chtěl přiznat.

Jak používat cURL s HTTP nebo HTTPS proxy

Tohle je nejběžnější nastavení a to, které použijete ve většině případů.

Použití přepínače -x / --proxy

Základní syntaxe vypadá takto:

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

-x a --proxy dělají přesně totéž — použijte ten, který se vám lépe pamatuje. Protože HTTP je výchozí proxy schéma cURL, můžete teoreticky vynechat předponu http:// a napsat jen proxy.example:8080. Já bych ji ale nechával explicitně, protože za půl roku si za tu srozumitelnost poděkujete.

Celou adresu uzavřete do uvozovek. Pokud heslo obsahuje @, # nebo &, neuzavřený řetězec si shell přebere po svém ještě dřív, než se k němu cURL vůbec dostane.

Připojení přes HTTPS proxy

Někteří poskytovatelé šifrují nejen spojení z proxy na cílový server, ale i samotné spojení z vašeho počítače na proxy. To je něco jiného než přístup na HTTPS web — protokol proxy a protokol cíle jsou nezávislé věci. Zadáte to takto:

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

Pokud tady dostanete chybu certifikátu, nenechte se svést k tomu, abyste přidali -k a šli dál. Tenhle přepínač vypne ověřování SSL certifikátu úplně, což je v pořádku pro pětiminutový lokální test, ale pro cokoli v produkci nebo s reálnými uživatelskými daty je to špatný nápad. Pokud řešíte firemní proxy, která zachytává TLS (MITM nastavení běžné v enterprise prostředí), správné řešení je importovat CA certifikát proxy, ne vypínat ověřování.

Autentizace pomocí --proxy-user

Přihlašovací údaje můžete také zadat zvlášť do vlastního přepínače, místo abyste je vkládali do URL:

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

Pozor na to, že velké -U není totéž co autentizace vůči cílovému webu (-u / --user, malé písmeno) — snadno se to zamění a pak pošlete proxy heslo úplně jinam. V enterprise prostředí, které používá místo Basic auth NTLM nebo Digest, přidejte k --proxy-user ještě --proxy-ntlm nebo --proxy-digest.

Jak používat cURL se SOCKS proxy: SOCKS4 vs. SOCKS5 vs. socks5h

HTTP and SOCKS proxy routing with local and remote DNS

SOCKS proxy fungují na nižší vrstvě než HTTP proxy — nezáleží jim na tom, jaký protokol tunelujete, takže jsou vhodné pro ne-HTTP provoz, Tor a cokoli, kde záleží na soukromí. Většina konkurenčních návodů to odbude jedním příkazem a jde dál. To je ale chyba, protože rozdíly mezi SOCKS4, SOCKS5 a socks5h:// jsou opravdu důležité.

VlastnostSOCKS4SOCKS5socks5h://
Podpora TCPAnoAnoAno
Podpora UDPNeAnoAno
AutentizaceNeAnoAno
Vzdálené DNS řešeníNeNe (lokální DNS)Ano (DNS řeší proxy)
Kompatibilita s TorNeRizikové (únik DNS)Ano

Právě řádek s DNS bývá největší past. U socks5:// vaše zařízení přeloží název hostitele ještě před tím, než spojení předá proxy — to znamená, že váš lokální DNS resolver a ve výsledku i váš ISP vidí, na jakou doménu se snažíte připojit, i když samotný HTTP provoz už jde přes proxy. socks5h:// to řeší tak, že rozlišení hostitele provádí proxy, takže lokálně nic neuniká. Proto také Tor dokumentace trvá na socks5h:// — použití prostého socks5:// znehodnocuje velkou část anonymity, kterou Tor poskytuje.

V cURL vypadá každá varianta takto:

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"

Pokud k tomu nemáte zvláštní důvod, používejte defaultně socks5h://. Nestojí to nic navíc a zároveň tím odstraníte únik, kterého byste si jinak vůbec nevšimli.

Nastavení proxy pomocí proměnných prostředí (a jak se vyhnout pastem)

Psát -x ke každému příkazu omrzí velmi rychle. Proměnné prostředí vám umožní nastavit proxy jednou pro celou shell session a všechny následné příkazy cURL ji automaticky zdědí — manuál cURL uvádí jako podporované http_proxy, HTTPS_PROXY, ALL_PROXY a NO_PROXY.

Základ

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"

Tady je část, na které lidé pořád narážejí: název proměnné odkazuje na protokol cílové URL, ne na protokol proxy. Takže http_proxy řídí požadavky na http:// adresy a HTTPS_PROXY řídí požadavky na https:// adresy — obě proměnné můžete směrovat na stejný HTTP proxy server, a je to naprosto normální.

Vynechání přes NO_PROXY

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

Hodnoty oddělíte čárkami a úvodní tečka u .internal.example funguje jako zástupný znak pro všechny subdomény. NO_PROXY přebíjí všechno ostatní — i když je -x v příkazu výslovně nastavené, shoda v NO_PROXY daný požadavek z proxy obejde.

Nástrahy, na které lidé skutečně narážejí

  • Zapomenuté export. Když jen napíšete http_proxy=http://... bez export, proměnná existuje jen v aktuálním shellu a cURL ji jako podřízený proces vůbec nevidí. Podle mých zkušeností je to nejčastější důvod hlášek typu „proxy nefunguje“.
  • Citlivost na velikost písmen. cURL výslovně kontroluje nejdřív malé http_proxy a dává mu přednost, pokud existují obě varianty. Některé jiné nástroje čtou jen velká písmena. Když zjišťujete, proč se proměnná „nebere“, zkontrolujte, jestli nemáte duplicitní zápis s jinou velikostí písmen.
  • Past s PowerShell aliasem. V PowerShell 5.1 příkaz curl vůbec nespustí cURL — volá Invoke-WebRequest, což je úplně jiný nástroj s jinými přepínači. Pokud vám na Windows hází -x divné chyby, napište explicitně curl.exe, abyste měli jistotu, že skutečně spouštíte cURL.
  • Rozdíly v syntaxi na Windows. CMD používá set http_proxy=...; PowerShell používá $env:http_proxy = "...". Zaměnit to mezi terminálovými relacemi je snadný způsob, jak ztratit půl dne.
  • Zastaralé proměnné. unset http_proxy a unset https_proxy odstraní starou proxy konfiguraci, která tiše směruje — a často i neúspěšně směruje — každý požadavek.

Pro rychlé přepínání se hodí pár aliasů v .bashrc:

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

Jak přimět cURL používat proxy vždy (konfigurační soubor)

Pokud jste za firemní proxy 95 % času, soubor .curlrc (na unixových systémech v domovské složce) nebo _curlrc (na Windows ve složce app-data) nastaví trvalý výchozí stav bez zásahu do proměnných prostředí:

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

Když chcete u jednoho konkrétního požadavku proxy vynechat, --noproxy "*" přepíše konfiguraci jen pro dané spuštění. Priorita obvykle funguje jako: přepínač v příkazové řádce > proměnná prostředí > konfigurační soubor, takže -x v příkazu vždy vyhraje, pokud nastane konflikt.

Důležité upozornění: nedávejte prosté heslo do .curlrc, pokud je soubor uložený někde, kde by se mohl synchronizovat, zálohovat nebo omylem dostat do repozitáře. Pro CI pipeline používejte secret manager vaší platformy a přihlašovací údaje vkládejte jako maskované proměnné prostředí.

Jak ověřit, že proxy opravdu funguje

Tohle je část, kterou většina ostatních návodů vynechává, a přitom právě ta ušetří nejvíc času při debugování. Proxy nastavit a jen předpokládat, že skutečně směruje provoz, je přesně ten důvod, proč lidé tráví hodiny laděním scraperu, který ve skutečnosti přes proxy nikdy nešel.

Metoda 1: Porovnejte odchozí IP adresu

Spusťte stejný dotaz na echo IP dvakrát — jednou přímo a jednou přes proxy — a porovnejte výstup:

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

Pokud oba příkazy vrátí stejnou IP adresu, proxy ve skutečnosti nic nedělá. Zkontrolujte syntaxi přepínačů, proměnné prostředí nebo to, jestli NO_PROXY omylem neodpovídá vašemu cíli.

Metoda 2: Přečtěte si podrobný výstup

Přidejte k jakémukoli proxy požadavku -v a cURL vypíše celý průběh spojení:

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

Hledejte řádek jako * Connected to proxy.example (xx.xx.xx.xx) port 8080, následovaný > CONNECT httpbin.org:443 HTTP/1.1 a nakonec < HTTP/1.1 200 Connection established. Tahle sekvence — připojení k proxy a následně CONNECT tunel k cíli — je práce HTTP CONNECT metody a přesně to má nastat, když je HTTPS cíl směrován přes HTTP proxy. Pokud se řádek CONNECT vůbec neobjeví, proxy přepínač se nepoužívá. Jedno upozornění: -v používejte jen při aktivním debugování a před sdílením výstup vždy začerněte — verbose režim může vypsat proxy přihlašovací údaje v čistém textu.

Metoda 3: Porovnání vedle sebe

Pro testování geolokace uložte oba výstupy do souborů a porovnejte je:

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

Pokud se odpovědi (nebo hlavičky u geograficky omezeného obsahu) liší, máte vizuální potvrzení, že proxy skutečně mění síťovou cestu — rychlý a nenáročný způsob, jak si ověřit, že všechno funguje, než půjdete dál.

Řešení běžných chyb cURL s proxy

Common cURL proxy error codes and troubleshooting paths

Většina návodů tady mává rukou a jednou zmíní -k. Tohle téma si zaslouží pořádnou referenční tabulku.

ChybaPravděpodobná příčinaOprava
curl: (7) Failed to connectŠpatný host/port proxy nebo je proxy nedostupnáOvěřte adresu; otestujte syrové připojení pomocí telnet host port nebo nc -zv host port
407 Proxy Authentication RequiredChybějící nebo nesprávné přihlašovací údaje k proxyPřidejte --proxy-user user:pass; zkontrolujte, zda poskytovatel nevyžaduje místo Basic NTLM/Digest/Negotiate
curl: (56) Recv failure: Connection reset by peerProxy během přenosu spojení přerušilaOvěřte stabilitu proxy u poskytovatele; pokud jde o proxy ukončující TLS, zkontrolujte práci s certifikátem místo vypínání ověření
curl: (28) Connection timed outFirewall blokuje provoz, proxy je zastaralá nebo je špatný portSpusťte env | grep -i proxy a zkontrolujte zbytkové proměnné; neaktuální proměnné smažte; otestujte přímý požadavek, abyste izolovali příčinu
Selhání ověření certifikátuNedůvěryhodný nebo zachytávající certifikát proxyZískejte správný CA řetězec a použijte --proxy-cacert; mimo jednorázovou diagnostiku nechte ověřování zapnuté

První univerzální krok u všech těchto chyb je přidat -v. Ukáže vám přesně, kde se spojení láme — při DNS rozlišení, TCP připojení, TLS handshaku nebo při autentizační výměně s proxy — místo toho, abyste hádali jen podle tříciferného kódu.

Pro firemní proxy konkrétně --proxy-ntlm a --proxy-negotiate pokrývají autentizační schémata domén Windows. Co cURL nativně neumí: PAC soubory (Proxy Auto-Config skripty, které některé firmy používají k dynamickému přidělování proxy). Pokud je vaše firma používá, budete muset skutečný host a port proxy zjistit ručně — obvykle v nastavení sítě prohlížeče — protože cURL nemá vestavěný parser PAC.

Kdy cURL + proxy nestačí

cURL s proxy zvládá statické HTML, REST API i jednoduché stahování dat zhruba tak dobře, jak to jen jde. Kde naráží, je moderní web a jeho oblíbené obrany: single-page aplikace renderované JavaScriptem, anti-bot systémy jako Cloudflare nebo Akamai a CAPTCHA. Když na React nebo Vue aplikaci za jednou z těchto ochran pošlete cURL, dostanete zpátky prázdné <div id="root"></div> — technicky úspěšný požadavek, prakticky nepoužitelná data. To není chyba cURL. Jen to není prohlížeč a nikdy se za něj nevydával.

Pokud už umíte spouštět cURL z terminálu a narazíte na tenhle strop, přirozený další krok není přechod na úplně jiný toolchain — je to přidání vrstvy, která za vás zajistí renderování a strukturování dat. Přesně tuhle mezeru mají zaplnit nástroje pro vývojáře od Thunderbit.

ScénářcURL + ProxyThunderbit API (POST /extract)
Statická HTML stránkaFunguje bez problémůFunguje, a navíc vrací strukturovaná data
SPA renderovaná přes JSVytáhne prázdné nebo neúplné HTMLrenderMode: "full" zpracuje JavaScript
Anti-bot / CAPTCHAZablokovánoVestavěné řešení
Výstup strukturovaných datSyrové HTML — musíte parsovat samiJSON podle vlastního schématu
Dávkové zpracování (100+ URL)Ruční smyčka + vlastní rate limitingPOST /batch/extract

Thunderbit Open API nabízí endpoint /extract, který vrací JSON odpovídající schématu přímo z JS-heavy stránek, a endpoint /distill pro čistý převod do Markdownu — obojí můžete volat ze stejné terminálové session, ve které jste dosud spouštěli cURL. K dispozici je také MCP server pro AI coding asistenty jako Claude nebo Cursor a CLI (npx @thunderbit/thunderbit-cli extract <url> --schema fields.json), pokud chcete zůstat čistě u skriptů. Nic z toho nenahrazuje cURL v úlohách, pro které je cURL skvělý — jen to přebírá práci tam, kam už se cURL strukturálně nedostane. Pokud chcete širší přehled o tom, kde dává AI asistovaný sběr dat smysl oproti vlastnoručnímu scraperu, podívejte se na naše přehledy AI web scraping, nejlepší AI web scrapery a web scraping bez programování, které to vysvětlují podrobněji.

Shrnutí

Rozchodit cURL s proxy není těžké, jakmile víte, kde se ve skutečnosti láme spojení — a ukazuje se, že skoro nikdy to není samotná proxy. Zapomenuté export. Záměna -u a -U. Použití socks5:// místo socks5h://. Spuštění PowerShell aliasu curl místo curl.exe. Každý z těchto případů vyvolá matoucí, obecně vypadající chybu, která s poskytovatelem proxy nemá nic společného.

Nejvíc času šetří tento zvyk: nejdřív ověřte, teprve potom řešte problém. Spusťte kontrolu IP, podívejte se na výstup -v, potvrďte, že proxy je vůbec v cestě požadavku, než začnete předpokládat, že se něco rozbilo dál po trase. A když vám cíl začne posílat JavaScript místo čistého HTML, není to problém cURL, který by se vyřešil dalším přepínačem — je to signál, že je čas sáhnout po nástroji stavěném na renderování, třeba po API Thunderbit, které má i bezplatnou verzi, pokud si chcete sami vyzkoušet rozdíl mezi JSON výstupem a syrovým HTML.

Nejčastější dotazy

Používá cURL proxy automaticky?
Ne. Pokud nemáte nastavené proměnné prostředí http_proxy / HTTPS_PROXY nebo nakonfigurovaný soubor .curlrc, cURL se připojí přímo k cíli bez proxy.

Jak zabráním tomu, aby cURL použil proxy jen pro jeden požadavek?
Přidejte k danému příkazu --noproxy "*". Chcete-li to vypnout pro celou shell session, spusťte unset http_proxy && unset https_proxy.

Můžu cURL používat s rotujícími proxy?
Ano — pokud vám poskytovatel nabízí rotační gateway (jedno endpoint, které při každém požadavku přidělí novou IP), stačí na něj v -x ukázat stejně jako na jakoukoli jinou proxy. U složitější rotace proti JS-renderovaným cílům zvládne rotační logiku i anti-bot vrstvu interně API jako Thunderbit, takže retry logiku nemusíte spravovat ručně.

Proč socks5:// uniká DNS dotazy, ale socks5h:// ne?
U socks5:// váš lokální počítač přeloží cílový hostname ještě před tím, než pošle požadavek proxy — takže DNS resolver vašeho ISP vidí doménu, kterou navštěvujete. socks5h:// přesune rozlišení hostitele na samotnou proxy, takže lokálně není vidět nic o cíli.

Je legální používat cURL s proxy?
Používání proxy je ve většině jurisdikcí samo o sobě legální. Důležité je, co s ní děláte — vždy respektujte podmínky cílového webu, robots.txt, pokud je relevantní, a všechny příslušné zákony o ochraně dat. Tenhle průvodce pokrývá jen technickou stránku věci, ne právní souhlas pro jakýkoli konkrétní případ použití.

Další informace

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.
Topics
cURL proxySOCKS5 proxyŘešení problémů s proxy
Obsah
Thunderbit · AI agent pro webová data

Extrahuj data z libovolné stránky za 1 kliknutí

Důvěřuje mu více než 250 000 uživatelů
k dispozici bezplatný plán
Z webové stránky do tabulky
Popiš, co potřebuješ — AI agent Thunderbit to nasbírá a exportuje do Excelu, Google Sheets, Airtable nebo Notion. Začni zdarma.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week