curl ایرر کوڈز: مکمل حوالہ

جب curl کمانڈ ناکام ہوتی ہے، تو یہ ایک عددی ایگزٹ کوڈ (جسے curl ایرر کوڈ بھی کہا جاتا ہے) واپس کرتی ہے جو ایرر کی قسم کی نشاندہی کرتا ہے۔ آپ curl ایگزٹ کوڈ کو curl کمانڈ کے فوراً بعد echo $? چلا کر چیک کر سکتے ہیں (یا PowerShell میں $LASTEXITCODE)۔ ایگزٹ کوڈ 0 کا مطلب کامیابی ہے؛ کوئی بھی دوسرا نمبر ایک مخصوص مسئلے کی نشاندہی کرتا ہے — DNS ریزولوشن کی ناکامیوں اور کنکشن ٹائم آؤٹ سے لے کر SSL سرٹیفکیٹ کے مسائل تک۔ یہ صفحہ سب سے عام curl ایرر کوڈز کا وضاحتوں، وجوہات اور حل کے ساتھ مکمل حوالہ ہے۔ اگر آپ اپنے کوڈ میں curl کمانڈز کے ساتھ کام کر رہے ہیں، تو انہیں اپنی پسند کی پروگرامنگ زبان میں تبدیل کرنے کے لیے curl2code میں پیسٹ کریں۔

فوری حوالہ جات کی جدول

0CURLE_OK

کامیابی۔ آپریشن بغیر کسی ایرر کے مکمل ہوا۔

1CURLE_UNSUPPORTED_PROTOCOL

غیر معاون پروٹوکول۔ URL ایسا پروٹوکول استعمال کرتا ہے جس کی حمایت کے ساتھ curl نہیں بنایا گیا تھا۔

3CURLE_URL_MALFORMAT

خراب URL۔ URL کی نحو غلط ہے یا اسے پارس نہیں کیا جا سکا۔

5CURLE_COULDNT_RESOLVE_PROXY

پراکسی کو ریزولو نہیں کیا جا سکا۔ مخصوص پراکسی ہوسٹ نیم کو ریزولو نہیں کیا جا سکا۔

6CURLE_COULDNT_RESOLVE_HOST

DNS لک اپ ناکام — ہوسٹ نیم کو IP ایڈریس میں ریزولو نہیں کیا جا سکا۔

7CURLE_COULDNT_CONNECT

TCP کنکشن ناکام — سرور بند ہے، پورٹ بلاک ہے، یا فائروال کنکشنز مسترد کر رہی ہے۔

18CURLE_PARTIAL_FILE

نامکمل فائل۔ منتقلی میں رکاوٹ آئی اور فائل کا صرف ایک حصہ موصول ہوا۔

22CURLE_HTTP_RETURNED_ERROR

سرور نے HTTP ایرر (4xx/5xx) واپس کیا اور --fail فلیگ استعمال ہوا تھا۔

23CURLE_WRITE_ERROR

رائٹ ایرر۔ curl موصول شدہ ڈیٹا ڈسک پر لکھنے میں ناکام ہوا (اجازت مسترد یا ڈسک بھری ہوئی)۔

28CURLE_OPERATION_TIMEDOUT

آپریشن نے زیادہ سے زیادہ مقررہ وقت سے تجاوز کر لیا (DNS، کنکشن، یا ٹرانسفر)۔

35CURLE_SSL_CONNECT_ERROR

SSL/TLS ہینڈ شیک ناکام — پروٹوکول ورژن یا سائفر سوئٹ کی عدم مطابقت۔

37CURLE_FILE_COULDNT_READ_FILE

فائل پڑھی نہیں جا سکی۔ درخواست میں حوالہ دی گئی مقامی فائل کھولی یا پڑھی نہیں جا سکی۔

52CURLE_GOT_NOTHING

سرور سے خالی جواب۔ سرور نے بغیر کوئی ڈیٹا بھیجے کنکشن بند کر دیا۔

56CURLE_RECV_ERROR

کنکشن ری سیٹ ہو گیا — سرور نے ڈیٹا ٹرانسفر کے دوران کنکشن ختم کر دیا۔

60CURLE_SSL_CACERT

SSL سرٹیفکیٹ کی تصدیق ناکام — میعاد ختم، self-signed، یا CA بنڈل پرانا ہے۔

77CURLE_SSL_CACERT_BADFILE

SSL CA سرٹیفکیٹ مسئلہ۔ مخصوص CA سرٹیفکیٹ فائل کو پڑھا یا پارس نہیں کیا جا سکا۔

92CURLE_HTTP2_STREAM

HTTP/2 سٹریم ایرر۔ ٹرانسفر کے دوران HTTP/2 پروٹوکول سطح کی سٹریم ایرر واقع ہوئی۔

ایرر 6: ہوسٹ ریزولو نہیں ہو سکا

اس کا مطلب کیا ہے
آپ کا ٹرمینل curl: (6) Could not resolve host دکھاتا ہے۔ curl ہوسٹ نیم کو IP ایڈریس میں ریزولو نہیں کر سکا — DNS لک اپ کسی بھی کنکشن کی کوشش سے پہلے ناکام ہو گئی۔
وجوہات
سب سے عام وجوہات یہ ہیں: ہوسٹ نیم میں ٹائپو (مثلاً curl https://apiexample.com بجائے api.example.comDNS سرور کے مسائل (آپ کا مقرر 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 استعمال کر رہے ہیں، تو یقینی بنائیں کنٹینر پورٹ شائع ہے۔ وربوز موڈ سے آزمائیں: 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 ایررز کو ناکامی سمجھنے کا حکم دیتا ہے۔
وجوہات
ایرر HTTP اسٹیٹس کوڈز جیسے 400 (Bad Request)، 401 (Unauthorized)، 403 (Forbidden)، 404 (Not Found)، یا 500 (Internal Server Error) سے پیدا ہوتی ہے — لیکن صرف جب --fail استعمال ہو۔ --fail کے بغیر، curl HTTP ایررز پر بھی کوڈ 0 سے باہر نکلتا ہے۔ عام وجوہات: غلط URL، گم شدہ تصدیق، ناکافی اجازتیں، یا سرور سائیڈ بگز۔
حل کیسے کریں
مکمل جوابی باڈی دیکھنے کے لیے --fail کے بغیر curl چلائیں — اس میں اکثر اصل ایرر پیغام ہوتا ہے۔ HTTP اسٹیٹس کوڈ چیک کریں: curl -w "%{http_code}" -o /dev/null -s URL۔ 401/403 کے لیے: اپنا auth ٹوکن یا 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۔ وربوز موڈ استعمال کریں یہ دیکھنے کے لیے کہ کہاں اٹکا ہوا ہے: 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 کو تازہ ترین ورژن میں اپ ڈیٹ کریں۔ اگر سرور self-signed سرٹیفکیٹ استعمال کرتا ہے، تو یہ عام طور پر ایرر 60 ہوتی ہے — ایرر 35 عام طور پر پروٹوکول سطح کی ہینڈ شیک ناکامی کی نشاندہی کرتی ہے۔
$ curl https://legacy-server.example.com/api

ایرر 56: وصولی ناکام — کنکشن ری سیٹ ہو گیا

اس کا مطلب کیا ہے
آپ کا ٹرمینل curl: (56) Recv failure: Connection reset by peer دکھاتا ہے۔ کنکشن کامیابی سے قائم ہوا، لیکن ڈیٹا کی وصولی ناکام ہوئی — سرور نے ٹرانسفر کے دوران غیر متوقع طور پر کنکشن بند یا ری سیٹ کر دیا۔
وجوہات
یہ اکثر اس وقت ہوتا ہے جب: سرور ٹرانسفر کے دوران کریش یا ری اسٹارٹ ہو جائے، لوڈ بیلنسر یا پراکسی کنکشن ختم کر دے (بے عمل ٹائم آؤٹ، درخواست بہت بڑی)، فائروال طویل عرصے کے کنکشنز ختم کر دے، سرور کا keep-alive ٹائم آؤٹ متوقع سے کم ہو، یا کلائنٹ اور سرور کے درمیان نیٹ ورک میں خلل آ جائے۔
حل کیسے کریں
درخواست دوبارہ کوشش کریں — عارضی نیٹ ورک مسائل سب سے عام وجہ ہیں۔ ناکامی کا صحیح مقام دیکھنے کے لیے وربوز موڈ استعمال کریں: curl -v URL۔ اگر بڑے اپ لوڈز کے دوران ایرر آئے، تو چنکڈ ٹرانسفر آزمائیں: curl -H "Transfer-Encoding: chunked" URL۔ Git آپریشنز میں RPC failed; curl 56 دکھنے پر، بفر بڑھائیں: 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 (سرٹیفکیٹ اتھارٹی) بنڈل سے تصدیق نہیں کر سکا۔ TLS ہینڈ شیک پروٹوکول سطح پر مکمل ہوا، لیکن سرٹیفکیٹ کی توثیق ناکام ہوئی۔
وجوہات
سب سے عام وجوہات: سرور self-signed سرٹیفکیٹ استعمال کرتا ہے، سرٹیفکیٹ کی میعاد ختم ہو چکی ہے، سرٹیفکیٹ چین نامکمل ہے (انٹرمیڈیٹ سرٹیفکیٹس غائب)، 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۔ ڈیولپمنٹ میں self-signed سرٹیفکیٹس کے لیے، curl -k URL استعمال کریں (پروڈکشن میں کبھی نہیں — یہ تمام سرٹیفکیٹ تصدیق غیر فعال کر دیتا ہے)۔ Docker میں ca-certificates پیکج انسٹال کریں۔
$ curl https://self-signed.example.com/api

دیگر ایرر کوڈز

0CURLE_OK

کامیابی۔ آپریشن بغیر کسی ایرر کے مکمل ہوا۔

1CURLE_UNSUPPORTED_PROTOCOL

غیر معاون پروٹوکول۔ URL ایسا پروٹوکول استعمال کرتا ہے جس کی حمایت کے ساتھ curl نہیں بنایا گیا تھا۔

3CURLE_URL_MALFORMAT

خراب URL۔ URL کی نحو غلط ہے یا اسے پارس نہیں کیا جا سکا۔

5CURLE_COULDNT_RESOLVE_PROXY

پراکسی کو ریزولو نہیں کیا جا سکا۔ مخصوص پراکسی ہوسٹ نیم کو ریزولو نہیں کیا جا سکا۔

18CURLE_PARTIAL_FILE

نامکمل فائل۔ منتقلی میں رکاوٹ آئی اور فائل کا صرف ایک حصہ موصول ہوا۔

23CURLE_WRITE_ERROR

رائٹ ایرر۔ curl موصول شدہ ڈیٹا ڈسک پر لکھنے میں ناکام ہوا (اجازت مسترد یا ڈسک بھری ہوئی)۔

37CURLE_FILE_COULDNT_READ_FILE

فائل پڑھی نہیں جا سکی۔ درخواست میں حوالہ دی گئی مقامی فائل کھولی یا پڑھی نہیں جا سکی۔

52CURLE_GOT_NOTHING

سرور سے خالی جواب۔ سرور نے بغیر کوئی ڈیٹا بھیجے کنکشن بند کر دیا۔

77CURLE_SSL_CACERT_BADFILE

SSL CA سرٹیفکیٹ مسئلہ۔ مخصوص CA سرٹیفکیٹ فائل کو پڑھا یا پارس نہیں کیا جا سکا۔

92CURLE_HTTP2_STREAM

HTTP/2 سٹریم ایرر۔ ٹرانسفر کے دوران HTTP/2 پروٹوکول سطح کی سٹریم ایرر واقع ہوئی۔

curl ایررز کو کیسے ڈیبگ کریں

جب curl ناکام ہو جائے، تو یہ تین فلیگز آپ کو بنیادی وجہ تیزی سے شناخت کرنے میں مدد کرتے ہیں — DNS ریزولوشن سے لے کر SSL ہینڈ شیک سے لے کر ریسپانس پے لوڈ تک۔

  1. 1

    وربوز آؤٹ پٹ فعال کریں

    مکمل درخواست/جواب سائیکل دیکھنے کے لیے curl -v URL چلائیں: DNS ریزولوشن، TCP کنکشن، TLS ہینڈ شیک، بھیجے گئے درخواست ہیڈرز، اور موصول شدہ جوابی ہیڈرز۔ یہ واحد سب سے مفید ڈیبگنگ فلیگ ہے۔

  2. 2

    HTTP اسٹیٹس کوڈ چیک کریں

    جوابی باڈی کے بغیر صرف HTTP اسٹیٹس کوڈ (200، 404، 500 وغیرہ) حاصل کرنے کے لیے curl -o /dev/null -s -w "%{http_code}" URL چلائیں۔ فوری ہیلتھ چیکس اور اسکرپٹنگ کے لیے مفید ہے۔

  3. 3

    خاموشی سے ایررز دکھائیں

    پروگریس بار چھپانے (-s) لیکن پھر بھی ایررز دکھانے (-S) کے لیے curl -sS URL چلائیں۔ اسکرپٹس کے لیے بہترین جہاں آپ صاف آؤٹ پٹ چاہتے ہیں لیکن ناکامیاں پکڑنا ضروری ہے۔

اکثر پوچھے جانے والے سوالات

curl ایگزٹ کوڈ کیسے چیک کریں؟

curl کمانڈ چلانے کے بعد، ایگزٹ کوڈ شیل کے خصوصی ویریئبل میں محفوظ ہوتا ہے۔ 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 اسٹیٹس کوڈ سے مختلف ہے — curl HTTP 404 پر بھی 0 واپس کرتا ہے جب تک --fail فلیگ استعمال نہ ہو۔

curl ایرر 28 (آپریشن ٹائم آؤٹ) کو کیسے ٹھیک کریں؟

ایرر 28 کا مطلب ہے کہ درخواست نے زیادہ سے زیادہ مقررہ وقت سے تجاوز کر لیا۔ پہلے، ٹائم آؤٹ بڑھائیں: curl --connect-timeout 30 --max-time 120 URL۔ --connect-timeout TCP کنکشن فیز کو محدود کرتا ہے، جبکہ --max-time پورے آپریشن کو محدود کرتا ہے۔ اس کے بعد، curl -v URL سے رکاوٹ کی تشخیص کریں — وربوز آؤٹ پٹ بالکل دکھاتا ہے کہ 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ڈیولپمنٹ میں self-signed سرٹیفکیٹس کے لیے: تصدیق چھوڑنے کے لیے 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" تلاش کریں۔