เมื่อเลือก handler ของไคลเอนต์ Guzzle อย่างตั้งใจ สแตกที่ใช้ cURL สามารถใช้ SOCKS ได้:

$stack = \GuzzleHttp\HandlerStack::create(
    new \GuzzleHttp\Handler\CurlHandler()
);

$client = new \GuzzleHttp\Client([
    'handler' => $stack,
    'proxy' => 'socks5h://proxy.example.net:1080',
]);

socks5h ขอให้พร็อกซีแปลงชื่อปลายทาง Guzzle ส่งปลายทางไปยัง libcurl ดังนั้นไบนารี libcurl ที่โหลดอยู่ต้องรองรับโปรโตคอลนั้น รายการพร็อกซี SOCKS5 มีผู้สมัครปลายทางสาธารณะสำหรับ URL พร็อกซีของไคลเอนต์

หากแอปพลิเคชันมีสแตกของ handler อยู่แล้ว ให้ตรวจสอบทรานสปอร์ตที่อยู่เบื้องหลังก่อนจะแทนที่และสูญเสียมิดเดิลแวร์ handler ที่จำกัดเฉพาะสตรีม HTTP ของ PHP ไม่สามารถทำ SOCKS ได้เพียงเพราะไคลเอนต์ได้รับตัวเลือกนี้

ตรวจสอบโพรเซสที่ส่งคำขอ CLI PHP และ PHP-FPM อาจโหลดไฟล์กำหนดค่าและส่วนขยายที่ต่างกัน การมี cURL ในตัวหนึ่งไม่ได้พิสูจน์ว่ามีในอีกตัวหนึ่ง

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