curl қате кодтары: толық анықтамалық
curl командасы сәтсіз аяқталғанда, ол қате түрін анықтайтын сандық шығу кодын (curl қате коды деп те аталады) қайтарады. curl шығу кодын curl командасынан кейін бірден echo $? орындау арқылы (немесе PowerShell-де $LASTEXITCODE) тексеруге болады. 0 шығу коды сәттілікті білдіреді; кез келген басқа сан нақты мәселені көрсетеді — DNS ажыратымдылығы сәтсіздіктерінен және қосылу таймауттарынан бастап SSL сертификат мәселелеріне дейін. Бұл бет ең жиі кездесетін curl қате кодтарының толық анықтамалығы, түсіндірмелері, себептері және түзетулерімен. Кодыңызда curl командаларымен жұмыс істесеңіз, оларды таңдаған бағдарламалау тіліңізге түрлендіру үшін curl2code-қа қойыңыз.
Жылдам анықтамалық кесте
Сәтті. Операция ешқандай қатесіз аяқталды.
Қолдау көрсетілмейтін хаттама. URL curl құрастырылмаған хаттаманы пайдаланады.
Дұрыс емес URL. URL синтаксисі жарамсыз немесе талдау мүмкін емес.
Прокси ажыратылмады. Көрсетілген прокси хост атауы ажыратылмады.
DNS іздеу сәтсіз аяқталды — хост атауын IP мекенжайына ажырату мүмкін болмады.
TCP қосылымы сәтсіз — сервер өшірілген, порт бұғатталған немесе брандмауэр қосылымдарды қабылдамайды.
Файлдың бір бөлігі. Тасымалдау үзілді және файлдың тек бір бөлігі алынды.
Сервер HTTP қатесін (4xx/5xx) қайтарды және --fail жалаушасы пайдаланылды.
Жазу қатесі. curl алынған деректерді дискке жаза алмады (рұқсат жоқ немесе диск толы).
Операция рұқсат етілген максималды уақыттан асты (DNS, қосылу немесе тасымалдау).
SSL/TLS хендшейкі сәтсіз — хаттама нұсқасы немесе шифрлау жиынтығының сәйкессіздігі.
Файлды оқу мүмкін емес. Сұрауда көрсетілген жергілікті файлды ашу немесе оқу мүмкін болмады.
Серверден бос жауап. Сервер ешқандай деректерді жібермей қосылымды жапты.
Қосылым қалпына келтірілді — деректер тасымалдау кезінде сервер қосылымды тастады.
SSL сертификатын тексеру сәтсіз — мерзімі өтіп кеткен, өзі қол қойған немесе CA жинағы ескірген.
SSL CA сертификат мәселесі. Көрсетілген CA сертификат файлын оқу немесе талдау мүмкін болмады.
HTTP/2 ағын қатесі. Тасымалдау кезінде HTTP/2 хаттама деңгейіндегі ағын қатесі орын алды.
Қате 6: хостты ажырату мүмкін емес
- Бұл нені білдіреді
- Терминалыңызда
curl: (6) Could not resolve hostкөрсетіледі. curl хост атауын IP мекенжайына ажырата алмады — қосылу әрекетінен бұрын DNS іздеу сәтсіз аяқталды. - Себептері
- Ең жиі кездесетін себептер: хост атауындағы қате (мысалы,
api.example.comорнынаcurl https://apiexample.com), DNS сервер мәселелері (конфигурацияланған DNS өшірілген немесе қолжетімсіз), желі қосылымы жоқ (Wi-Fi ажыратылған, VPN қосылмаған) немесе домен шын мәнінде жоқ. - Қалай түзетуге болады
- Алдымен URL дұрыстығын тексеріңіз. Содан кейін DNS ажыратымдылығын тікелей тексеріңіз:
nslookup api.example.comнемесеdig api.example.com. DNS сәтсіз болса, басқа DNS серверін қолданып көріңіз:curl --dns-servers 8.8.8.8 https://api.example.com./etc/resolv.confфайлын немесе желі параметрлерін тексеріңіз. Корпоративтік VPN артында болсаңыз, ішкі DNS хостты ажырата алатынын тексеріңіз.
$ curl https://api.exmple.com/usersҚате 7: қосылу сәтсіз
- Бұл нені білдіреді
- Терминалыңызда
curl: (7) Failed to connect to host port: Connection refusedкөрсетіледі. curl хост атауын ажыратты, бірақ серверге TCP қосылымын орната алмады — қосылым белсенді түрде қабылданбады немесе TCP деңгейінде таймаутқа ұшырады. - Себептері
- Жиі кездесетін себептер: сервер өшірілген немесе жұмыс істемейді, брандмауэр портты бұғаттайды (жергілікті және сервер жағындағы брандмауэрлерді тексеріңіз), порт дұрыс емес (мысалы, қызмет 8080-де жұмыс істейді, бірақ сіз 443-ке қосылып жатырсыз) немесе серверде ауыр жүктеме кезінде тыңдау кезегі толы.
- Қалай түзетуге болады
- Сервердің жұмыс істеп тұрғанын тексеріңіз:
ping api.example.comжәнеtelnet api.example.com 443. Дұрыс порттың ашық екенін тексеріңіз:nmap -p 443 api.example.com. Тексеру үшін жергілікті брандмауэрді уақытша өшіріңіз. Docker пайдалансаңыз, контейнер порты жарияланғанын тексеріңіз. Қосылымның қай жерде сәтсіз аяқталатынын көру үшін verbose режимін қолданып көріңіз:curl -v https://api.example.com.
$ curl https://localhost:8080/apiҚате 22: HTTP қатесі қайтарылды
- Бұл нені білдіреді
- Терминалыңызда
curl: (22) The requested URL returned errorкөрсетіледі. Сервер HTTP қате статус кодын (4xx немесе 5xx) қайтарды және curl-fнемесе--failжалаушасымен шақырылды, ол curl-ге HTTP қателерін сәтсіздік ретінде қарастыруды нұсқайды. - Себептері
- Қате 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) немесе 500 (Internal Server Error) сияқты HTTP статус кодтарымен іске қосылады — бірақ тек
--failпайдаланылғанда.--failболмаса, curl HTTP қателерінде де 0 кодымен шығады. Жиі кездесетін себептер: дұрыс емес URL, жоқ аутентификация, жеткіліксіз рұқсаттар немесе сервер жағындағы қателер. - Қалай түзетуге болады
- Толық жауап денесін көру үшін curl-ді
--failжалаушасынсыз іске қосыңыз — онда көбінесе нақты қате хабарламасы болады. HTTP статус кодын тексеріңіз:curl -w "%{http_code}" -o /dev/null -s URL. 401/403 үшін: аутентификация токенін немесе API кілтін тексеріңіз. 404 үшін: URL жолын қайта тексеріңіз. 500 үшін: мәселе сервер жағында.
$ curl --fail https://api.example.com/nonexistentҚате 28: операция таймаутқа ұшырады
- Бұл нені білдіреді
- Терминалыңызда
curl: (28) Operation timed outнемесеcurl: (28) Connection timed outкөрсетіледі. Операция рұқсат етілген уақыттан ұзаққа созылды. Бұл ең жиі кездесетін curl қатесі — ол DNS ажыратымдылығы, TCP қосылымы, SSL хендшейкі немесе деректер тасымалдау кезінде пайда болуы мүмкін. - Себептері
- Типтік себептер: баяу немесе шамадан тыс жүктелген сервер уақытында жауап бермейді, желі кептелісі немесе пакет жоғалуы, брандмауэр пакеттерді дыбыссыз тастайды (қабылдамау жоқ, тек тыныштық),
--connect-timeoutнемесе--max-timeарқылы орнатылған тым қатаң таймаут мәндері немесе кідіріс тудыратын прокси конфигурация қатесі. - Қалай түзетуге болады
- Таймаутты ұлғайтыңыз:
curl --connect-timeout 30 --max-time 120 URL. Қай жерде тоқтап тұрғанын көру үшін verbose режимін пайдаланыңыз:curl -v URL. Желі кідірісін тексеріңіз:ping api.example.comжәнеtraceroute api.example.com. Прокси артында болсаңыз, оны айналып өтуге тырысыңыз:curl --noproxy '*' URL. Үлкен файл тасымалдаулары үшін автоматты қайталау мақсатында--retry 3пен--retry-delay 5пайдалануды қарастырыңыз.
$ curl --connect-timeout 5 https://slow-api.example.com/dataҚате 35: SSL қосылу қатесі
- Бұл нені білдіреді
- Терминалыңызда
curl: (35) SSL connect errorкөрсетіледі. SSL/TLS хендшейкі сәтсіз аяқталды — curl сервермен қауіпсіз қосылым орната алмады. - Себептері
- Жиі кездесетін себептер: TLS нұсқасының сәйкессіздігі (сервер TLS 1.3 талап етеді, бірақ сіздің curl тек TLS 1.2-ге дейін қолдайды), шифрлау жиынтығының сәйкессіздігі, сервердегі SSL конфигурация қатесі (мерзімі өтіп кеткен сертификат хендшейк кезінде берілді, толық емес тізбек), сервер берілген портта HTTPS-ті шын мәнінде қолдамайды немесе прокси немесе брандмауэр SSL қосылымын ұстап алады (MITM).
- Қалай түзетуге болады
- Нақты TLS нұсқасын мәжбүрлеңіз:
curl --tlsv1.2 URLнемесеcurl --tlsv1.3 URL. Сервердің нені қолдайтынын тексеріңіз:openssl s_client -connect api.example.com:443. curl мен OpenSSL-ді соңғы нұсқаларға жаңартыңыз. Егер сервер өзі қол қойған сертификатты пайдаланса, бұл әдетте 60-шы қате — 35-ші қате әдетте хаттама деңгейіндегі хендшейк сәтсіздігін көрсетеді.
$ curl https://legacy-server.example.com/apiҚате 56: қабылдау сәтсіздігі — қосылым қалпына келтірілді
- Бұл нені білдіреді
- Терминалыңызда
curl: (56) Recv failure: Connection reset by peerкөрсетіледі. Қосылым сәтті орнатылды, бірақ деректерді қабылдау сәтсіз аяқталды — тасымалдау кезінде сервер қосылымды күтпеген жерден жапты немесе қалпына келтірді. - Себептері
- Бұл көбінесе мынадай жағдайларда болады: сервер тасымалдау кезінде бұзылады немесе қайта іске қосылады, жүктеме теңестіруші немесе прокси қосылымды тастайды (бос тұру таймауты, сұрау тым үлкен), брандмауэр ұзақ мерзімді қосылымдарды тоқтатады, серверде күтілгеннен қысқа keep-alive таймауты бар немесе клиент пен сервер арасында желі үзілісі болады.
- Қалай түзетуге болады
- Сұрауды қайта жіберіп көріңіз — уақытша желі мәселелері ең жиі кездесетін себеп. Сәтсіздіктің нақты нүктесін көру үшін verbose режимін пайдаланыңыз:
curl -v URL. Қате үлкен жүктеулер кезінде болса, бөлікті тасымалдауды қолданып көріңіз:curl -H "Transfer-Encoding: chunked" URL.RPC failed; curl 56көрсететін Git операциялары үшін буферді ұлғайтыңыз:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadҚате 60: SSL сертификат мәселесі
- Бұл нені білдіреді
- Терминалыңызда
curl: (60) SSL certificate problem: unable to get local issuer certificateкөрсетіледі. curl серверінің SSL сертификатын CA (Certificate Authority) жинағымен салыстырып тексере алмады. TLS хендшейкі хаттама деңгейінде аяқталды, бірақ сертификатты тексеру сәтсіз аяқталды. - Себептері
- Ең жиі кездесетін себептер: сервер өзі қол қойған сертификатты пайдаланады, сертификаттың мерзімі өтіп кеткен, сертификат тізбегі толық емес (аралық сертификаттар жоқ), curl-дің CA жинағы ескірген (ескі жүйелерде немесе Docker контейнерлерінде жиі кездеседі) немесе сертификаттың Common Name / SAN сұралған хост атауына сәйкес келмейді.
- Қалай түзетуге болады
- CA жинағын жаңартыңыз:
curl --cacert /path/to/cacert.pem URL. Жаңартылған жинақты https://curl.se/ca/cacert.pem сайтынан жүктеп алыңыз. Диагностика жасау үшін:openssl s_client -connect api.example.com:443 -showcerts. Әзірлеу ортасындағы өзі қол қойған сертификаттар үшінcurl -k URLпайдаланыңыз (өндірісте ешқашан пайдаланбаңыз — ол барлық сертификат тексеруін өшіреді). Docker-деca-certificatesпакетін орнатыңыз.
$ curl https://self-signed.example.com/apiБасқа қате кодтары
Сәтті. Операция ешқандай қатесіз аяқталды.
Қолдау көрсетілмейтін хаттама. URL curl құрастырылмаған хаттаманы пайдаланады.
Дұрыс емес URL. URL синтаксисі жарамсыз немесе талдау мүмкін емес.
Прокси ажыратылмады. Көрсетілген прокси хост атауы ажыратылмады.
Файлдың бір бөлігі. Тасымалдау үзілді және файлдың тек бір бөлігі алынды.
Жазу қатесі. curl алынған деректерді дискке жаза алмады (рұқсат жоқ немесе диск толы).
Файлды оқу мүмкін емес. Сұрауда көрсетілген жергілікті файлды ашу немесе оқу мүмкін болмады.
Серверден бос жауап. Сервер ешқандай деректерді жібермей қосылымды жапты.
SSL CA сертификат мәселесі. Көрсетілген CA сертификат файлын оқу немесе талдау мүмкін болмады.
HTTP/2 ағын қатесі. Тасымалдау кезінде HTTP/2 хаттама деңгейіндегі ағын қатесі орын алды.
curl қателерін қалай жөндеуге болады
curl сәтсіз аяқталғанда, бұл үш жалауша түпкі себепті тез анықтауға көмектеседі — DNS ажыратымдылығынан SSL хендшейкіне және жауап жүктемесіне дейін.
- 1
Verbose шығысын қосу
Толық сұрау/жауап циклін көру үшін
curl -v URLіске қосыңыз: DNS ажыратымдылығы, TCP қосылымы, TLS хендшейкі, жіберілген сұрау тақырыптары және алынған жауап тақырыптары. Бұл жалғыз ең пайдалы жөндеу жалаушасы. - 2
HTTP статус кодын тексеру
Жауап денесіз тек HTTP статус кодын (200, 404, 500 және т.б.) алу үшін
curl -o /dev/null -s -w "%{http_code}" URLіске қосыңыз. Жылдам денсаулық тексерулері мен скрипттер үшін пайдалы. - 3
Қателерді тыныш көрсету
Прогресс жолағын жасыру (
-s) бірақ қателерді көрсету (-S) үшінcurl -sS URLіске қосыңыз. Таза шығыс қажет, бірақ сәтсіздіктерді ұстау керек скрипттер үшін тамаша.
Жиі қойылатын сұрақтар
curl шығу кодын қалай тексеруге болады?
curl командасын орындағаннан кейін, шығу коды shell-дің арнайы айнымалысында сақталады. Bash/Zsh-де curl командасынан кейін бірден echo $? іске қосыңыз. PowerShell-де $LASTEXITCODE пайдаланыңыз. Скрипттерде оны шартпен тексеруге болады: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. 0 шығу коды сәттілікті білдіреді; кез келген басқа сан қатені көрсетеді. HTTP статус кодын да, curl шығу кодын да көру үшін мыналарды біріктіріңіз: curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". curl шығу коды HTTP статус кодынан ерекше — --fail жалаушасын пайдаланбасаңыз, curl HTTP 404 кезінде де 0 қайтарады.
curl қатесі 28 (операция таймаутқа ұшырады) қалай түзетіледі?
28-ші қате сұраудың рұқсат етілген максималды уақыттан асқанын білдіреді. Алдымен таймаутты ұлғайтыңыз: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout TCP қосылым фазасын шектейді, ал --max-time бүкіл операцияны шектейді. Содан кейін curl -v URL арқылы кедергіні диагностикалаңыз — verbose шығысы curl-дің қай жерде тоқтағанын (DNS, қосылу, TLS немесе тасымалдау) дәл көрсетеді. Жиі кездесетін түзетулер: желі қосылымы мен DNS параметрлерін тексеріңіз, сервердің жауап беріп тұрғанын тексеріңіз (ping және telnet), --noproxy '*' арқылы прокси-лерді айналып өтіңіз, ал үлкен жүктемелер үшін автоматты қайталау мақсатында --retry 3 --retry-delay 5 қосыңыз.
curl SSL сертификат қателерін (60-шы қате) қалай түзетуге болады?
60-шы қате curl серверінің SSL сертификатын тексере алмайтынын білдіреді. Түзету себебіне байланысты. Ескірген CA жинағы үшін: https://curl.se/ca/cacert.pem сайтынан жаңасын жүктеп алып, curl --cacert /path/to/cacert.pem URL пайдаланыңыз. Docker контейнерлері үшін: ca-certificates пакетін орнатыңыз (apt-get install ca-certificates). Әзірлеу ортасындағы өзі қол қойған сертификаттар үшін: тексеруді өткізу үшін curl -k URL пайдаланыңыз — бірақ өндірісте -k ешқашан пайдаланбаңыз, себебі ол барлық сертификат тексеруін өшіреді. Диагностика жасау үшін: сертификат тізбегін тексеру үшін openssl s_client -connect host:443 -showcerts іске қосыңыз. Сертификаттың мерзімі өтіп кетсе немесе хост атауы сәйкес келмесе, мәселе сервер жағында.
curl қатесі 7 (қосылу сәтсіз) нені білдіреді?
7-ші қате curl хост атауын IP мекенжайына ажыратқанын, бірақ TCP қосылымын орната алмағанын білдіреді. Сервер қосылымды белсенді түрде қабылдамады немесе желі деңгейінде қосылу әрекеті таймаутқа ұшырады. Жиі кездесетін себептер: мақсатты хостта қызмет жұмыс істемейді (systemctl status немесе docker ps арқылы тексеріңіз), брандмауэр портты бұғаттайды (telnet host port арқылы тексеріңіз), дұрыс емес портты пайдаланып жатырсыз (мысалы, 443 орнына 80 немесе әзірлеу сервері үшін 8080) немесе ауыр жүктеме кезінде серверде тыңдау кезегі толы. Жөндеу үшін: curl -v URL пайдаланып, шығыста "Connected to" немесе "Connection refused" іздеңіз.