curl-fejlkoder: Komplet reference

Når en curl-kommando fejler, returnerer den en numerisk exitkode (også kaldet curl-fejlkode), der identificerer typen af fejl. Du kan tjekke curl-exitkoden ved at køre echo $? umiddelbart efter curl-kommandoen (eller $LASTEXITCODE i PowerShell). Exitkode 0 betyder succes; ethvert andet tal indikerer et specifikt problem — fra DNS-opløsningsfejl og forbindelsestimeouts til SSL-certifikatproblemer. Denne side er en komplet reference over de mest almindelige curl-fejlkoder med forklaringer, årsager og løsninger. Hvis du arbejder med curl-kommandoer i din kode, kan du indsætte dem i curl2code for at konvertere til dit foretrukne programmeringssprog.

Hurtig referencetabel

0CURLE_OK

Succes. Operationen blev gennemført uden fejl.

1CURLE_UNSUPPORTED_PROTOCOL

Ikke-understøttet protokol. URL'en bruger en protokol, som curl ikke er bygget med understøttelse af.

3CURLE_URL_MALFORMAT

Forkert URL-format. URL-syntaksen er ugyldig eller kunne ikke parses.

5CURLE_COULDNT_RESOLVE_PROXY

Kunne ikke opløse proxy. Det angivne proxy-hostnavn kunne ikke opløses.

6CURLE_COULDNT_RESOLVE_HOST

DNS-opslag fejlede — hostnavnet kunne ikke opløses til en IP-adresse.

7CURLE_COULDNT_CONNECT

TCP-forbindelse mislykkedes — serveren er nede, porten er blokeret, eller firewall afviser forbindelser.

18CURLE_PARTIAL_FILE

Delvis fil. Overførslen blev afbrudt, og kun en del af filen blev modtaget.

22CURLE_HTTP_RETURNED_ERROR

Serveren returnerede en HTTP-fejl (4xx/5xx), og --fail-flaget var brugt.

23CURLE_WRITE_ERROR

Skrivefejl. curl kunne ikke skrive modtagne data til disk (adgang nægtet eller disk fuld).

28CURLE_OPERATION_TIMEDOUT

Operationen overskred den maksimalt tilladte tid (DNS, forbindelse eller overførsel).

35CURLE_SSL_CONNECT_ERROR

SSL/TLS-handshake mislykkedes — protokolversion eller cipher suite-uoverensstemmelse.

37CURLE_FILE_COULDNT_READ_FILE

Kunne ikke læse fil. En lokal fil refereret i forespørgslen kunne ikke åbnes eller læses.

52CURLE_GOT_NOTHING

Tomt svar fra server. Serveren lukkede forbindelsen uden at sende nogen data.

56CURLE_RECV_ERROR

Forbindelsen blev nulstillet — serveren droppede forbindelsen under dataoverførslen.

60CURLE_SSL_CACERT

SSL-certifikatverificering fejlede — udløbet, selvsigneret, eller CA-pakke er forældet.

77CURLE_SSL_CACERT_BADFILE

Problem med SSL CA-certifikat. Kunne ikke læse eller parse den angivne CA-certifikatfil.

92CURLE_HTTP2_STREAM

HTTP/2-streamfejl. En HTTP/2-protokolniveau-streamfejl opstod under overførslen.

Fejl 6: Kunne ikke opløse host

Hvad det betyder
Din terminal viser curl: (6) Could not resolve host. curl kunne ikke opløse hostnavnet til en IP-adresse — DNS-opslaget fejlede, før nogen forbindelse blev forsøgt.
Årsager
De mest almindelige årsager er: en stavefejl i hostnavnet (f.eks. curl https://apiexample.com i stedet for api.example.com), DNS-serverproblemer (din konfigurerede DNS er nede eller utilgængelig), ingen netværksforbindelse (Wi-Fi afbrudt, VPN ikke tilsluttet), eller domænet eksisterer faktisk ikke.
Sådan løser du det
Kontrollér først, at URL'en er korrekt. Test derefter DNS-opløsningen direkte: nslookup api.example.com eller dig api.example.com. Hvis DNS fejler, prøv en anden DNS-server: curl --dns-servers 8.8.8.8 https://api.example.com. Tjek dine /etc/resolv.conf- eller netværksindstillinger. Hvis du er bag en virksomheds-VPN, skal du sikre, at den interne DNS kan opløse hosten.
$ curl https://api.exmple.com/users

Fejl 7: Forbindelse mislykkedes

Hvad det betyder
Din terminal viser curl: (7) Failed to connect to host port: Connection refused. curl opløste hostnavnet, men kunne ikke etablere en TCP-forbindelse til serveren — forbindelsen blev aktivt afvist eller fik timeout på TCP-niveau.
Årsager
Almindelige årsager inkluderer: serveren er nede eller kører ikke, en firewall blokerer porten (tjek både lokal og serverside firewall), porten er forkert (f.eks. kører tjenesten på 8080, men du forbinder til 443), eller serverens listen backlog er fuld under stor belastning.
Sådan løser du det
Bekræft, at serveren kører: ping api.example.com og telnet api.example.com 443. Tjek, om den korrekte port er åben: nmap -p 443 api.example.com. Deaktivér lokal firewall midlertidigt for at teste. Hvis du bruger Docker, skal du sikre, at containerens port er publiceret. Prøv med detaljeret tilstand: curl -v https://api.example.com for at se præcis, hvor forbindelsen fejler.
$ curl https://localhost:8080/api

Fejl 22: HTTP returnerede fejl

Hvad det betyder
Din terminal viser curl: (22) The requested URL returned error. Serveren returnerede en HTTP-fejlstatuskode (4xx eller 5xx), og curl blev kaldt med -f eller --fail, som fortæller curl at behandle HTTP-fejl som fejl.
Årsager
Fejlen udløses af HTTP-statuskoder som 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) eller 500 (Internal Server Error) — men kun når --fail bruges. Uden --fail afslutter curl med kode 0 selv ved HTTP-fejl. Almindelige årsager: forkert URL, manglende autentificering, utilstrækkelige rettigheder eller fejl på serversiden.
Sådan løser du det
Kør curl uden --fail for at se det fulde svarindhold — det indeholder ofte den faktiske fejlmeddelelse. Tjek HTTP-statuskoden: curl -w "%{http_code}" -o /dev/null -s URL. For 401/403: bekræft dit auth-token eller API-nøgle. For 404: dobbelttjek URL-stien. For 500: problemet er på serversiden.
$ curl --fail https://api.example.com/nonexistent

Fejl 28: Timeout på operation

Hvad det betyder
Din terminal viser curl: (28) Operation timed out eller curl: (28) Connection timed out. Operationen tog længere tid end den tilladte tid. Dette er den mest almindelige curl-fejl — den kan opstå under DNS-opløsning, TCP-forbindelse, SSL-handshake eller dataoverførsel.
Årsager
Typiske årsager inkluderer: langsom eller overbelastet server, der ikke svarer i tide, netværkskongestion eller pakketab, firewall der stille dropper pakker (ingen afvisning, bare stilhed), for stramme timeout-værdier sat med --connect-timeout eller --max-time, eller en fejlkonfigureret proxy, der forårsager forsinkelser.
Sådan løser du det
Forøg timeout: curl --connect-timeout 30 --max-time 120 URL. Brug detaljeret tilstand for at se, hvor det hænger: curl -v URL. Test netværkslatens: ping api.example.com og traceroute api.example.com. Hvis du er bag en proxy, prøv at omgå den: curl --noproxy '*' URL. Ved store filoverførsler kan du overveje at bruge --retry 3 med --retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/data

Fejl 35: SSL-forbindelsesfejl

Hvad det betyder
Din terminal viser curl: (35) SSL connect error. SSL/TLS-handshake mislykkedes — curl kunne ikke etablere en sikker forbindelse til serveren.
Årsager
Almindelige årsager: TLS-versionsuoverensstemmelse (serveren kræver TLS 1.3, men din curl understøtter kun op til TLS 1.2), cipher suite-inkompatibilitet, SSL-fejlkonfiguration på serveren (udløbet certifikat præsenteret under handshake, ufuldstændig kæde), serveren understøtter faktisk ikke HTTPS på den givne port, eller en proxy eller firewall opfanger SSL-forbindelsen (MITM).
Sådan løser du det
Tving en specifik TLS-version: curl --tlsv1.2 URL eller curl --tlsv1.3 URL. Tjek, hvad serveren understøtter: openssl s_client -connect api.example.com:443. Opdatér curl og OpenSSL til de nyeste versioner. Hvis serveren bruger et selvsigneret certifikat, er det normalt fejl 60 i stedet — fejl 35 indikerer typisk en handshake-fejl på protokolniveau.
$ curl https://legacy-server.example.com/api

Fejl 56: Modtagelsesfejl — Forbindelsen blev nulstillet

Hvad det betyder
Din terminal viser curl: (56) Recv failure: Connection reset by peer. Forbindelsen blev etableret korrekt, men datamodtagelsen fejlede — serveren lukkede eller nulstillede forbindelsen uventet under overførslen.
Årsager
Dette sker ofte, når: serveren crasher eller genstarter midt i overførslen, en load balancer eller proxy dropper forbindelsen (idle timeout, for stor forespørgsel), en firewall afbryder langvarige forbindelser, serveren har en keep-alive timeout, der er kortere end forventet, eller der er en netværksafbrydelse mellem klient og server.
Sådan løser du det
Prøv forespørgslen igen — midlertidige netværksproblemer er den mest almindelige årsag. Brug detaljeret tilstand: curl -v URL for at se det præcise fejlpunkt. Hvis fejlen opstår under store uploads, prøv chunked transfer: curl -H "Transfer-Encoding: chunked" URL. For Git-operationer, der viser RPC failed; curl 56, forøg bufferen: git config http.postBuffer 524288000.
$ curl https://api.example.com/large-download

Fejl 60: SSL-certifikatproblem

Hvad det betyder
Din terminal viser curl: (60) SSL certificate problem: unable to get local issuer certificate. curl kunne ikke verificere serverens SSL-certifikat mod sin CA (Certificate Authority)-pakke. TLS-handshake blev gennemført på protokolniveau, men certifikatvalideringen fejlede.
Årsager
De mest almindelige årsager: serveren bruger et selvsigneret certifikat, certifikatet er udløbet, certifikatkæden er ufuldstændig (manglende mellemliggende certifikater), curls CA-pakke er forældet (almindeligt på ældre systemer eller i Docker-containere), eller certifikatets Common Name / SAN matcher ikke det anmodede hostnavn.
Sådan løser du det
Opdatér CA-pakken: curl --cacert /path/to/cacert.pem URL. Download en opdateret pakke fra https://curl.se/ca/cacert.pem. For at diagnosticere: openssl s_client -connect api.example.com:443 -showcerts. For selvsignerede certifikater i udvikling, brug curl -k URL (aldrig i produktion — det deaktiverer al certifikatverificering). I Docker, installér ca-certificates-pakken.
$ curl https://self-signed.example.com/api

Andre fejlkoder

0CURLE_OK

Succes. Operationen blev gennemført uden fejl.

1CURLE_UNSUPPORTED_PROTOCOL

Ikke-understøttet protokol. URL'en bruger en protokol, som curl ikke er bygget med understøttelse af.

3CURLE_URL_MALFORMAT

Forkert URL-format. URL-syntaksen er ugyldig eller kunne ikke parses.

5CURLE_COULDNT_RESOLVE_PROXY

Kunne ikke opløse proxy. Det angivne proxy-hostnavn kunne ikke opløses.

18CURLE_PARTIAL_FILE

Delvis fil. Overførslen blev afbrudt, og kun en del af filen blev modtaget.

23CURLE_WRITE_ERROR

Skrivefejl. curl kunne ikke skrive modtagne data til disk (adgang nægtet eller disk fuld).

37CURLE_FILE_COULDNT_READ_FILE

Kunne ikke læse fil. En lokal fil refereret i forespørgslen kunne ikke åbnes eller læses.

52CURLE_GOT_NOTHING

Tomt svar fra server. Serveren lukkede forbindelsen uden at sende nogen data.

77CURLE_SSL_CACERT_BADFILE

Problem med SSL CA-certifikat. Kunne ikke læse eller parse den angivne CA-certifikatfil.

92CURLE_HTTP2_STREAM

HTTP/2-streamfejl. En HTTP/2-protokolniveau-streamfejl opstod under overførslen.

Sådan fejlfinder du curl-fejl

Når curl fejler, hjælper disse tre flag dig med hurtigt at identificere grundårsagen — fra DNS-opløsning til SSL-handshake til svarpayload.

  1. 1

    Aktivér detaljeret output

    Kør curl -v URL for at se den fulde forespørgsels-/svarcyklus: DNS-opløsning, TCP-forbindelse, TLS-handshake, sendte forespørgselsheaders og modtagne svarheaders. Dette er det mest nyttige fejlfindingsflag.

  2. 2

    Tjek HTTP-statuskoden

    Kør curl -o /dev/null -s -w "%{http_code}" URL for kun at få HTTP-statuskoden (200, 404, 500 osv.) uden svarteksten. Nyttigt til hurtige sundhedstjek og scripting.

  3. 3

    Vis fejl stille

    Kør curl -sS URL for at undertrykke fremdriftslinjen (-s), men stadig vise fejl (-S). Perfekt til scripts, hvor du vil have rent output, men stadig skal fange fejl.

Ofte stillede spørgsmål

Hvordan tjekker man curl-exitkoden?

Efter at have kørt en curl-kommando gemmes exitkoden i shellens specielle variabel. I Bash/Zsh kører du echo $? umiddelbart efter curl-kommandoen. I PowerShell bruger du $LASTEXITCODE. I scripts kan du tjekke den med en betingelse: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Exitkode 0 betyder succes; ethvert andet tal indikerer en fejl. For at se både HTTP-statuskoden og curl-exitkoden, kombinér curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Bemærk, at curls exitkode er forskellig fra HTTP-statuskoden — curl returnerer 0 selv ved HTTP 404, medmindre du bruger flaget --fail.

Hvordan løser man curl-fejl 28 (operation timeout)?

Fejl 28 betyder, at forespørgslen overskred den maksimalt tilladte tid. Først, forøg timeout: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout begrænser TCP-forbindelsesfasen, mens --max-time begrænser hele operationen. Derefter, diagnosticér flaskehalsen med curl -v URL — det detaljerede output viser præcis, hvor curl sidder fast (DNS, forbindelse, TLS eller overførsel). Almindelige løsninger: tjek din netværksforbindelse og DNS-indstillinger, bekræft at serveren svarer (ping og telnet), omgå proxyer med --noproxy '*', og for store downloads tilføj --retry 3 --retry-delay 5 for automatiske genforsøg.

Hvordan løser man curl SSL-certifikatfejl (fejl 60)?

Fejl 60 betyder, at curl ikke kan verificere serverens SSL-certifikat. Løsningen afhænger af årsagen. For en forældet CA-pakke: download en ny fra https://curl.se/ca/cacert.pem og brug curl --cacert /path/to/cacert.pem URL. For Docker-containere: installér pakken ca-certificates (apt-get install ca-certificates). For selvsignerede certifikater i udvikling: brug curl -k URL for at springe verificering over — men brug aldrig -k i produktion, da det deaktiverer al certifikatkontrol. For at diagnosticere: kør openssl s_client -connect host:443 -showcerts for at inspicere certifikatkæden. Hvis certifikatet er udløbet, eller hostnavnet ikke matcher, er problemet på serversiden.

Hvad betyder curl-fejl 7 (forbindelse mislykkedes)?

Fejl 7 betyder, at curl opløste hostnavnet til en IP-adresse, men ikke kunne etablere en TCP-forbindelse. Serveren afviste aktivt forbindelsen, eller forbindelsesforsøget fik timeout på netværksniveau. Almindelige årsager: tjenesten kører ikke på målhosten (tjek med systemctl status eller docker ps), en firewall blokerer porten (test med telnet host port), du bruger den forkerte port (f.eks. 80 i stedet for 443, eller 8080 for en udviklingsserver), eller serverens listen backlog er fuld under stor belastning. For at fejlfinde: brug curl -v URL og kig efter "Connected to" eller "Connection refused" i outputtet.