เมื่อทดสอบด้วย 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 จะทิ้งข้อผิดพลาดในการรับส่งข้อมูล ควรบันทึกผลของโปรเซสและข้อความผิดพลาดที่ลบข้อมูลอ่อนไหวออกแล้วด้วย ในทางกลับกัน curl อาจรับส่งข้อมูลสำเร็จแม้เว็บไซต์ส่งสถานะผิดพลาด หากไม่ได้ใช้ตัวเลือก fail ที่เหมาะสม การตอบกลับ HTTP และผลการทำงานของไคลเอนต์ตอบคำถามคนละข้อ

อย่าพยายามแก้ 000 ด้วยการปิดการยืนยัน TLS หรือเพิ่มส่วนหัวแบบสุ่ม ก่อนอื่นให้หาว่าขั้นตอนไหนไปไม่ถึงการตอบกลับสุดท้าย

บทความที่เกี่ยวข้อง