curl-virhekoodit: Täydellinen hakuteos
Kun curl-komento epäonnistuu, se palauttaa numeerisen paluukoodin (kutsutaan myös curl-virhekoodiksi), joka tunnistaa virheen tyypin. Voit tarkistaa curlin paluukoodin ajamalla echo $? heti curl-komennon jälkeen (tai $LASTEXITCODE PowerShellissä). Paluukoodi 0 tarkoittaa onnistumista; mikä tahansa muu luku osoittaa tietyn ongelman — DNS-resoluution epäonnistumisista ja yhteyden aikakatkaisuista SSL-sertifikaattiongelmiin. Tämä sivu on täydellinen hakuteos yleisimmistä curl-virhekoodeista selityksineen, syineen ja korjauksineen. Jos työskentelet curl-komentojen kanssa koodissasi, liitä ne curl2codeen muuntaaksesi ne valitsemallesi ohjelmointikielelle.
Pikaviitetaulukko
Onnistui. Toiminto suoritettiin ilman virheitä.
Protokollaa ei tueta. URL käyttää protokollaa, jota curl ei ole käännetty tukemaan.
Virheellinen URL. URL-syntaksi on virheellinen tai sitä ei voitu jäsentää.
Välityspalvelinta ei voitu selvittää. Määritetyn välityspalvelimen isäntänimeä ei voitu selvittää.
DNS-haku epäonnistui — isäntänimeä ei voitu selvittää IP-osoitteeksi.
TCP-yhteys epäonnistui — palvelin on alhaalla, portti on estetty tai palomuuri hylkää yhteydet.
Osittainen tiedosto. Siirto keskeytyi ja vain osa tiedostosta vastaanotettiin.
Palvelin palautti HTTP-virheen (4xx/5xx) ja --fail-lippu oli käytössä.
Kirjoitusvirhe. curl ei pystynyt kirjoittamaan vastaanotettua dataa levylle (käyttöoikeus evätty tai levy täynnä).
Toiminto ylitti suurimman sallitun ajan (DNS, yhteys tai siirto).
SSL/TLS-kättely epäonnistui — protokollaversio- tai salakirjoituspakettiristiriita.
Tiedostoa ei voitu lukea. Pyynnössä viitattua paikallista tiedostoa ei voitu avata tai lukea.
Tyhjä vastaus palvelimelta. Palvelin sulki yhteyden lähettämättä mitään dataa.
Yhteys katkaistiin — palvelin katkaisi yhteyden tiedonsiirron aikana.
SSL-sertifikaatin vahvistus epäonnistui — vanhentunut, itse allekirjoitettu tai CA-nippu on vanhentunut.
SSL CA -sertifikaattiongelma. Määritettyä CA-sertifikaattitiedostoa ei voitu lukea tai jäsentää.
HTTP/2-virtavirhe. HTTP/2-protokollatason virtavirhe tapahtui siirron aikana.
Virhe 6: Isäntäkonetta ei voitu selvittää
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (6) Could not resolve host. curl ei pystynyt selvittämään isäntänimeä IP-osoitteeksi — DNS-haku epäonnistui ennen kuin yhteyttä yritettiin muodostaa. - Syyt
- Yleisimmät syyt ovat: kirjoitusvirhe isäntänimessä (esim.
curl https://apiexample.comeikäapi.example.com), DNS-palvelinongelmat (määritetty DNS on alhaalla tai tavoittamattomissa), ei verkkoyhteyttä (Wi-Fi katkaistu, VPN ei yhdistetty) tai verkkotunnus todella ei ole olemassa. - Miten korjata
- Tarkista ensin, että URL on oikein. Testaa sitten DNS-resoluutio suoraan:
nslookup api.example.comtaidig api.example.com. Jos DNS epäonnistuu, kokeile toista DNS-palvelinta:curl --dns-servers 8.8.8.8 https://api.example.com. Tarkista/etc/resolv.conftai verkkoasetukset. Jos olet yrityksen VPN:n takana, varmista, että sisäinen DNS pystyy selvittämään isännän.
$ curl https://api.exmple.com/usersVirhe 7: Yhteyden muodostaminen epäonnistui
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (7) Failed to connect to host port: Connection refused. curl selvitti isäntänimen, mutta ei pystynyt muodostamaan TCP-yhteyttä palvelimeen — yhteys hylättiin aktiivisesti tai aikakatkaistiin TCP-tasolla. - Syyt
- Yleisiä syitä ovat: palvelin on alhaalla tai ei käynnissä, palomuuri estää portin (tarkista sekä paikallinen että palvelinpuolen palomuuri), portti on väärä (esim. palvelu toimii portissa 8080, mutta yhdistät porttiin 443), tai palvelimen kuuntelujono on täynnä suuren kuorman alla.
- Miten korjata
- Varmista, että palvelin on käynnissä:
ping api.example.comjatelnet api.example.com 443. Tarkista, onko oikea portti auki:nmap -p 443 api.example.com. Poista paikallinen palomuuri väliaikaisesti käytöstä testataksesi. Jos käytät Dockeria, varmista, että kontin portti on julkaistu. Kokeile verbose-tilassa:curl -v https://api.example.comnähdäksesi tarkalleen, missä yhteys epäonnistuu.
$ curl https://localhost:8080/apiVirhe 22: HTTP palautti virheen
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (22) The requested URL returned error. Palvelin palautti HTTP-virhetilanteen (4xx tai 5xx) ja curlia kutsuttiin-f- tai--fail-lipulla, joka käskee curlia käsittelemään HTTP-virheet epäonnistumisina. - Syyt
- Virheen laukaisevat HTTP-tilakoodit kuten 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) tai 500 (Internal Server Error) — mutta vain kun
--failon käytössä. Ilman--fail-lippua curl palauttaa koodin 0 myös HTTP-virheiden yhteydessä. Yleisiä syitä: väärä URL, puuttuva todennus, riittämättömät oikeudet tai palvelinpuolen virheet. - Miten korjata
- Aja curl ilman
--fail-lippua nähdäksesi koko vastauksen rungon — se sisältää usein varsinaisen virheviestin. Tarkista HTTP-tilakoodi:curl -w "%{http_code}" -o /dev/null -s URL. 401/403-virheille: varmista todennustunniste tai API-avain. 404-virheelle: tarkista URL-polku. 500-virheelle: ongelma on palvelinpuolella.
$ curl --fail https://api.example.com/nonexistentVirhe 28: Toiminto aikakatkaistiin
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (28) Operation timed outtaicurl: (28) Connection timed out. Toiminto kesti kauemmin kuin sallittu aika. Tämä on yleisin curl-virhe — se voi ilmetä DNS-resoluution, TCP-yhteyden, SSL-kättelyn tai tiedonsiirron aikana. - Syyt
- Tyypillisiä syitä ovat: hidas tai ylikuormitettu palvelin, joka ei vastaa ajoissa, verkon ruuhkautuminen tai pakettihävikki, palomuuri hylkää paketit hiljaisesti (ei hylkäystä, vain hiljaisuutta), liian tiukat aikakatkaisuarvot
--connect-timeout- tai--max-time-lipuilla, tai välipalvelimen virheellinen konfiguraatio. - Miten korjata
- Kasvata aikakatkaisua:
curl --connect-timeout 30 --max-time 120 URL. Käytä verbose-tilaa nähdäksesi, missä se juuttuu:curl -v URL. Testaa verkon viive:ping api.example.comjatraceroute api.example.com. Jos olet välipalvelimen takana, kokeile ohittaa se:curl --noproxy '*' URL. Suurille tiedostosiirroille harkitse--retry 3ja--retry-delay 5automaattisia uudelleenyrityksiä.
$ curl --connect-timeout 5 https://slow-api.example.com/dataVirhe 35: SSL-yhteysvirhe
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (35) SSL connect error. SSL/TLS-kättely epäonnistui — curl ei pystynyt muodostamaan suojattua yhteyttä palvelimeen. - Syyt
- Yleisiä syitä: TLS-versioristiriita (palvelin vaatii TLS 1.3, mutta curlisi tukee vain TLS 1.2:ta), salakirjoituspakettiyhteensopimattomuus, palvelimen virheellinen SSL-konfiguraatio (vanhentunut sertifikaatti kättelyn aikana, puutteellinen ketju), palvelin ei oikeasti tue HTTPS:ää kyseisessä portissa, tai välipalvelin tai palomuuri kaappaa SSL-yhteyden (MITM).
- Miten korjata
- Pakota tietty TLS-versio:
curl --tlsv1.2 URLtaicurl --tlsv1.3 URL. Tarkista, mitä palvelin tukee:openssl s_client -connect api.example.com:443. Päivitä curl ja OpenSSL uusimpiin versioihin. Jos palvelin käyttää itse allekirjoitettua sertifikaattia, kyseessä on yleensä virhe 60 — virhe 35 viittaa tyypillisesti protokollatason kättelyvirheeseen.
$ curl https://legacy-server.example.com/apiVirhe 56: Vastaanotto epäonnistui — Yhteys katkaistiin
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (56) Recv failure: Connection reset by peer. Yhteys muodostettiin onnistuneesti, mutta tiedon vastaanotto epäonnistui — palvelin sulki tai nollasi yhteyden odottamattomasti siirron aikana. - Syyt
- Tämä tapahtuu usein, kun: palvelin kaatuu tai käynnistyy uudelleen siirron aikana, kuormantasaaja tai välipalvelin katkaisee yhteyden (joutoaikakatkaisu, liian suuri pyyntö), palomuuri katkaisee pitkäkestoiset yhteydet, palvelimella on lyhyempi keep-alive-aikakatkaisu kuin odotettiin, tai verkkovika asiakkaan ja palvelimen välillä.
- Miten korjata
- Yritä pyyntöä uudelleen — hetkelliset verkko-ongelmat ovat yleisin syy. Käytä verbose-tilaa:
curl -v URLnähdäksesi tarkan epäonnistumiskohdan. Jos virhe tapahtuu suurten latausten aikana, kokeile osittaista siirtoa:curl -H "Transfer-Encoding: chunked" URL. Git-operaatioille, jotka näyttävätRPC failed; curl 56, kasvata puskuria:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadVirhe 60: SSL-sertifikaattiongelma
- Mitä se tarkoittaa
- Terminaalissasi näkyy
curl: (60) SSL certificate problem: unable to get local issuer certificate. curl ei pystynyt vahvistamaan palvelimen SSL-sertifikaattia CA-nipputiedostoa (Certificate Authority) vasten. TLS-kättely suoritettiin protokollatasolla, mutta sertifikaatin vahvistus epäonnistui. - Syyt
- Yleisimmät syyt: palvelin käyttää itse allekirjoitettua sertifikaattia, sertifikaatti on vanhentunut, sertifikaattiketju on puutteellinen (välisertifikaatit puuttuvat), curlin CA-nippu on vanhentunut (yleistä vanhoissa järjestelmissä tai Docker-konteissa), tai sertifikaatin Common Name / SAN ei vastaa pyydettyä isäntänimeä.
- Miten korjata
- Päivitä CA-nippu:
curl --cacert /path/to/cacert.pem URL. Lataa päivitetty nippu osoitteesta https://curl.se/ca/cacert.pem. Diagnosoidaksesi:openssl s_client -connect api.example.com:443 -showcerts. Itse allekirjoitetuille sertifikaateille kehityksessä käytäcurl -k URL(älä koskaan tuotannossa — se poistaa kaiken sertifikaatin vahvistuksen). Dockerissa asennaca-certificates-paketti.
$ curl https://self-signed.example.com/apiMuut virhekoodit
Onnistui. Toiminto suoritettiin ilman virheitä.
Protokollaa ei tueta. URL käyttää protokollaa, jota curl ei ole käännetty tukemaan.
Virheellinen URL. URL-syntaksi on virheellinen tai sitä ei voitu jäsentää.
Välityspalvelinta ei voitu selvittää. Määritetyn välityspalvelimen isäntänimeä ei voitu selvittää.
Osittainen tiedosto. Siirto keskeytyi ja vain osa tiedostosta vastaanotettiin.
Kirjoitusvirhe. curl ei pystynyt kirjoittamaan vastaanotettua dataa levylle (käyttöoikeus evätty tai levy täynnä).
Tiedostoa ei voitu lukea. Pyynnössä viitattua paikallista tiedostoa ei voitu avata tai lukea.
Tyhjä vastaus palvelimelta. Palvelin sulki yhteyden lähettämättä mitään dataa.
SSL CA -sertifikaattiongelma. Määritettyä CA-sertifikaattitiedostoa ei voitu lukea tai jäsentää.
HTTP/2-virtavirhe. HTTP/2-protokollatason virtavirhe tapahtui siirron aikana.
Miten korjata curl-virheitä
Kun curl epäonnistuu, nämä kolme lippua auttavat tunnistamaan juurisyyn nopeasti — DNS-resoluutiosta SSL-kättelyyn ja vastaussisältöön.
- 1
Ota käyttöön yksityiskohtainen tuloste
Aja
curl -v URLnähdäksesi koko pyyntö/vastaussyklin: DNS-resoluutio, TCP-yhteys, TLS-kättely, lähetetyt pyyntöotsikot ja vastaanotetut vastausotsikot. Tämä on yksittäin hyödyllisin vianmäärityslippu. - 2
Tarkista HTTP-tilakoodi
Aja
curl -o /dev/null -s -w "%{http_code}" URLsaadaksesi pelkän HTTP-tilakoodin (200, 404, 500 jne.) ilman vastauksen runkoa. Hyödyllinen nopeisiin terveystarkistuksiin ja skriptaukseen. - 3
Näytä virheet hiljaisesti
Aja
curl -sS URLpiilottaaksesi edistymispalkin (-s) mutta näyttääksesi silti virheet (-S). Täydellinen skripteille, joissa haluat puhtaan tulosteen mutta tarvitset epäonnistumisten havaitsemisen.
Usein kysytyt kysymykset
Miten tarkistaa curlin paluukoodi?
Curl-komennon ajamisen jälkeen paluukoodi tallennetaan komentotulkin erikoismuuttujaan. Bash/Zsh-ympäristössä aja echo $? heti curl-komennon jälkeen. PowerShellissä käytä $LASTEXITCODE. Skripteissä voit tarkistaa sen ehdolla: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Paluukoodi 0 tarkoittaa onnistumista; mikä tahansa muu luku osoittaa virheen. Nähdäksesi sekä HTTP-tilakoodin että curlin paluukoodin, yhdistä curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Huomaa, että curlin paluukoodi on eri asia kuin HTTP-tilakoodi — curl palauttaa 0 myös HTTP 404 -vastauksen yhteydessä, ellei käytetä --fail-lippua.
Miten korjata curl-virhe 28 (toiminto aikakatkaistiin)?
Virhe 28 tarkoittaa, että pyyntö ylitti suurimman sallitun ajan. Ensinnäkin kasvata aikakatkaisua: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout rajoittaa TCP-yhteysvaihetta, kun taas --max-time rajoittaa koko toimintoa. Seuraavaksi selvitä pullonkaula komennolla curl -v URL — yksityiskohtainen tuloste näyttää tarkalleen, mihin curl juuttuu (DNS, yhteys, TLS tai siirto). Yleisiä korjauksia: tarkista verkkoyhteys ja DNS-asetukset, varmista että palvelin vastaa (ping ja telnet), ohita välipalvelimet komennolla --noproxy '*', ja suurille latauksille lisää --retry 3 --retry-delay 5 automaattisia uudelleenyrityksiä varten.
Miten korjata curlin SSL-sertifikaattivirheet (virhe 60)?
Virhe 60 tarkoittaa, että curl ei pysty vahvistamaan palvelimen SSL-sertifikaattia. Korjaus riippuu syystä. Vanhentuneelle CA-nipulle: lataa uusi osoitteesta https://curl.se/ca/cacert.pem ja käytä curl --cacert /path/to/cacert.pem URL. Docker-konteille: asenna ca-certificates-paketti (apt-get install ca-certificates). Itse allekirjoitetuille sertifikaateille kehityksessä: käytä curl -k URL ohittaaksesi vahvistuksen — mutta älä koskaan käytä -k-lippua tuotannossa, sillä se poistaa kaiken sertifikaattitarkistuksen. Diagnosoidaksesi: aja openssl s_client -connect host:443 -showcerts tarkastaaksesi sertifikaattiketjun. Jos sertifikaatti on vanhentunut tai isäntänimi ei täsmää, ongelma on palvelinpuolella.
Mitä curl-virhe 7 (yhteyden muodostaminen epäonnistui) tarkoittaa?
Virhe 7 tarkoittaa, että curl selvitti isäntänimen IP-osoitteeksi, mutta ei pystynyt muodostamaan TCP-yhteyttä. Palvelin hylkäsi yhteyden aktiivisesti tai yhteysyritys aikakatkaistiin verkkotasolla. Yleisiä syitä: palvelu ei ole käynnissä kohdeisännällä (tarkista komennolla systemctl status tai docker ps), palomuuri estää portin (testaa komennolla telnet host port), käytät väärää porttia (esim. 80 eikä 443, tai 8080 kehityspalvelimelle), tai palvelimen kuuntelujono on täynnä suuren kuorman alla. Vianmääritykseen: käytä curl -v URL ja etsi tulosteesta "Connected to" tai "Connection refused".