وقتی آزمایش curl برای وضعیت HTTP مقدار 000 را چاپ می‌کند، یعنی کد پاسخ HTTP نهایی‌ای دریافت نکرده که گزارش کند. سایت وضعیت HTTP واقعی‌ای به نام 000 نفرستاده است.

خطا را هم ثبت کنید

این مثال برای پوستهٔ POSIX، فیلد HTTP نهایی، فیلد CONNECT و کد خروج فرایند curl را چاپ می‌کند:

curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect}\n' https://example.com/
result=$?
printf 'curl_exit=%s\n' "$result"

نقطهٔ اتصال مثال را با پراکسی HTTP خود یا گزینه‌ای از فهرست پراکسی‌های HTTP جایگزین کنید. show-error را روشن نگه دارید؛ پیام خطا اغلب مفیدترین بخش است. فیلد CONNECT هنگام استفاده از تونل اهمیت دارد و دومین وضعیت نهایی سایت نیست.

مقادیر را کنار هم بخوانید

  • اتصال ناموفق به پراکسی ممکن است فیلد HTTP را روی 000 باقی بگذارد.
  • پایان مهلت پیش از دریافت پاسخ نیز می‌تواند همین نتیجه را بدهد.
  • اگر پس از پاسخ موفق CONNECT، خطای TLS رخ دهد، ممکن است connect=200 و http=000 نمایش داده شود.
  • پاسخ کامل سایت، مانند 403، متفاوت است: یک پاسخ HTTP واقعی برای بررسی وجود دارد.

کد خروج دقیق و پیام خطا علت‌های احتمالی را محدود می‌کنند. بررسی کنید خطا هنگام یافتن پراکسی، اتصال به پورت آن، مذاکرهٔ تونل یا تأیید مقصد رخ داده است.

همهٔ نتایج را به بررسی وضعیت محدود نکنید

اسکریپتی که فقط http_code را ذخیره می‌کند، خطای انتقال را دور می‌ریزد. نتیجهٔ فرایند و پیام خطایی را هم ذخیره کنید که اطلاعات حساس از آن حذف شده باشد. از طرف دیگر، اگر گزینهٔ fail مناسبی به کار نبرید، curl ممکن است انتقال را با موفقیت تمام کند، در حالی که سایت وضعیت خطا برگردانده است. پاسخ HTTP و نتیجهٔ اجرای کلاینت به پرسش‌های متفاوتی جواب می‌دهند.

برای رفع 000، تأیید TLS را خاموش نکنید و هدر تصادفی اضافه نکنید. ابتدا مشخص کنید کدام عملیات به پاسخ نهایی نرسیده است.

مقالات مرتبط