ถ้า curl พยายามเชื่อมต่อ localhost ไม่ว่าคุณจะให้ URL อะไรก็ตาม VPN คือจุดเริ่มต้นที่ไม่ถูกต้อง พร็อกซี HTTP หรือ SOCKS ภายในเครื่องอาจเป็นจุดเชื่อมต่อแรกที่ตั้งใจไว้ แม้ว่าบริการที่คุณต้องการจะอยู่ที่อื่นโดยสิ้นเชิงก็ตาม หากพร็อกซีนั้นไม่ทำงานแล้ว ความพยายามไปยัง localhost จะล้มเหลวก่อนที่ curl จะไปถึงปลายทางด้วยซ้ำ การตอบกลับของพร็อกซีก็ไม่ใช่หลักฐานว่าปลายทางได้ตอบกลับ

ทำตามขั้นตอนเหล่านี้ตามลำดับและหยุดที่ขั้นตอนแรกที่เปลี่ยนความพยายามเชื่อมต่อครั้งแรก

อ่านกฎพร็อกซีของ curl เองก่อน

curl อ่านตัวแปรพร็อกซีที่เฉพาะกับโปรโตคอล เช่น https_proxy และ HTTPS_PROXY รวมถึง ALL_PROXY เมื่อไม่มีค่าที่เฉพาะกับโปรโตคอลใดใช้บังคับ ตรวจสอบสภาพแวดล้อมของเชลล์ บริการ หรืองานที่เรียกใช้ curl จริง ไม่ใช่ของเทอร์มินัลปัจจุบันของคุณ งาน CI หน่วย systemd และเชลล์แบบโต้ตอบอาจสืบทอดชุดที่แตกต่างกันสามชุด การเดาจากเชลล์ที่มองเห็นคือสิ่งที่ทำให้การสอบสวนนี้เสียเวลาทั้งบ่าย

มีข้อยกเว้นหนึ่งที่ควรจำ curl ยอมรับ http_proxy เฉพาะตัวพิมพ์เล็กเท่านั้น ส่วนตัวพิมพ์ใหญ่ HTTP_PROXY จะถูกเพิกเฉย นั่นคือเหตุผลที่สภาพแวดล้อมเดียวกันทำงานต่างกันในเครื่องมืออื่น

อ่านค่าเหล่านี้เป็นความลับ เพราะ URL ของพร็อกซีมักมีข้อมูลรับรอง

จากนั้นตรวจสอบไฟล์กำหนดค่าเริ่มต้นของ curl ว่ามีการแทนที่พร็อกซีหรือการเชื่อมต่อหรือไม่ และยืนยันว่าคุณกำลังรันไฟล์ปฏิบัติการใดจริง ๆ นามแฝงของเชลล์ ฟังก์ชัน หรือสคริปต์ห่ออาจเพิ่มตัวเลือกที่ไม่เคยปรากฏบนบรรทัดคำสั่งของคุณ

เปรียบเทียบการเรียกสามแบบโดยเปิด TLS

ใช้ปลายทางการวินิจฉัยที่ได้รับอนุมัติหนึ่งแห่งและไบนารีเดียวกันสำหรับทั้งสามครั้ง

curl -v https://service.corp.example/status
curl -q -v https://service.corp.example/status
curl -q --proxy '' -v https://service.corp.example/status

-q ระงับ curlrc ค่าเริ่มต้น และต้องเป็นพารามิเตอร์แรกของบรรทัดจึงจะทำงานได้ มันไม่ได้ลบตัวแปรสภาพแวดล้อมของพร็อกซี ซึ่งทำให้ผู้ที่คาดหวังเช่นนั้นประหลาดใจ รูปแบบที่สามเพิ่มค่า --proxy ว่าง เพื่อแทนที่พร็อกซีที่สภาพแวดล้อมร้องขอเฉพาะการเรียกนั้น เปรียบเทียบความพยายามเชื่อมต่อครั้งแรกในแต่ละเอาต์พุต ไม่ใช่รหัสสถานะสุดท้าย

เอาต์พุตแบบละเอียดอาจเปิดเผยส่วนหัว โทเคน และข้อมูลรับรองของพร็อกซี ดังนั้นเก็บไว้ในเครื่องและอ่านบางส่วนก่อนแชร์

แต่ละผลลัพธ์ตัดอะไรออก

หากการข้ามการกำหนดค่าเริ่มต้นเปลี่ยนการเชื่อมต่อ ไฟล์กำหนดค่าคือต้นเหตุ หากการปิดพร็อกซีที่สืบทอดมาอย่างชัดเจนเปลี่ยนสิ่งนั้น ตัวแปรสภาพแวดล้อมคือต้นเหตุ หากทั้งสองไม่เปลี่ยนและ localhost ยังปรากฏ ให้ดูการแทนที่การเชื่อมต่อในบรรทัดคำสั่ง การแปลงชื่อโฮสต์ และไฟล์ปฏิบัติการที่เลือก แต่ละอย่างมีการแก้ไขต่างกัน และไม่มีอย่างใดเป็นการเปลี่ยนแปลงเส้นทาง

การโหลดไลบรารีที่กำหนดเองหรือพฤติกรรมเครือข่ายที่ถูกแทรกเป็นชั้นถัดไป และตัวแปรสภาพแวดล้อมเพียงอย่างเดียวไม่ใช่หลักฐานของสิ่งนั้น

แยกการตัดสินใจเรื่องพร็อกซีออกจาก VPN

เมื่อ curl เลือกปลายทางโดยตรง ระบบปฏิบัติการยังคงกำหนดเส้นทางการเชื่อมต่อนั้น การปิดพร็อกซีของแอปพลิเคชันไม่ได้ปิดเส้นทางของ VPN หรือนโยบายการกรองของมัน ทำการเปรียบเทียบการเข้าถึงโดยตรงเฉพาะที่การวินิจฉัยนั้นได้รับอนุญาต การทดสอบที่เลี่ยงนโยบายอย่างเงียบ ๆ ไม่ใช่ผลลัพธ์ที่ถูกต้อง แต่เป็นเหตุการณ์

หากจำเป็นต้องใช้พร็อกซีภายในเครื่อง ให้คืนค่าบริการและที่อยู่แทนการลบการตั้งค่าของมัน

หากมีเพียงปลายทางส่วนตัวที่เลือกไว้เท่านั้นที่ต้องการการเข้าถึงโดยตรง ให้เพิ่มข้อยกเว้นแคบ ๆ ที่ได้รับอนุมัติและเก็บพร็อกซีไว้สำหรับอย่างอื่น เก็บข้อผิดพลาดแรกจากเส้นทางที่เลือกไว้ เพราะการปฏิเสธ localhost การปฏิเสธ CONNECT ของพร็อกซี ความล้มเหลวของใบรับรอง และข้อผิดพลาดการอนุญาตบ่งชี้ถึงสี่ขั้นตอนที่แตกต่างกัน

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