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