ตั้ง IP พร็อกซีให้คำขอ Guzzle
ใช้ตัวเลือก proxy รายคำขอของ Guzzle และเข้าใจเวลาหมดอายุการเชื่อมต่อที่ขึ้นกับ handler รวมถึงรายการข้ามพร็อกซีที่ต้องระบุเอง
ตัวเลือก proxy ของ Guzzle รับ URL ปลายทางแบบเต็ม ตั้งค่าในคำขอเมื่อมีเพียงงานนั้นที่ควรใช้ IP ที่เลือก
<?php
require __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/', [
'proxy' => 'http://203.0.113.10:8080',
'connect_timeout' => 5,
'timeout' => 15,
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo (string) $response->getBody();
ตัวอย่างสมมติว่าติดตั้ง Guzzle 7 ผ่าน Composer แล้ว แทนที่อยู่เอกสารด้วยพร็อกซี HTTP จริงจากผู้ให้บริการหรือรายการพร็อกซี HTTP คงปลายทางไว้ใน URL คำขอ พร็อกซีเป็นตัวกลาง ไม่ใช่ทรัพยากรที่จะดาวน์โหลด
ที่นี่ http_errors เป็น false เพื่อให้ยังตรวจคำตอบข้อผิดพลาด HTTP ได้ ความล้มเหลวในการเชื่อมต่อยังส่งข้อยกเว้นการถ่ายโอน ดังนั้นอุโมงค์ HTTPS ที่ถูกปฏิเสธตอนสร้างอาจล้มเหลวก่อนรับออบเจ็กต์คำตอบเว็บไซต์ตามปกติ
ตรวจ handler เมื่อขีดจำกัดการเชื่อมต่อทำงานต่างกัน
Guzzle ใช้ HTTP handler ได้หลายแบบ เอกสารระบุว่า cURL handler ที่มีในตัวรองรับ connect_timeout handler ที่ทำเองหรือสภาพแวดล้อมไม่มี PHP cURL อาจไม่เทียบเท่ากัน ตรวจ handler ของแอปก่อนสรุปว่าตัวเลือก timeout ที่คัดลอกมาทำงานแล้ว
ควรตั้ง timeout รวมด้วย รายการฟรีอาจหยุดตอบระหว่างการตรวจแต่ละครั้ง และค่าเริ่มต้นไม่ใช่เส้นตายที่เหมาะกับคำขอที่ต้องจบอย่างรวดเร็ว
ใช้แมปพร็อกซี
แมปช่วยเลือกเส้นทางตามสกีมปลายทางและระบุโฮสต์ที่จะข้ามพร็อกซีอย่างชัดเจน:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
ใช้แอเรย์นี้แทนตัวเลือกสตริง คีย์ HTTPS เลือกปลายทาง HTTPS แต่ค่า HTTP ยังอธิบายตัวรับฟังของพร็อกซี โพรโทคอลรับฟังที่ต่างกันต้องตั้งค่าปลายทางต่างกัน
เมื่อระบุตัวเลือก proxy ของคำขอเอง Guzzle คาดให้ระบุค่า no ที่ต้องการเอง แทนที่จะคัดลอกจาก NO_PROXY อัตโนมัติ รายการว่างมีประโยชน์ในการทดสอบพร็อกซีแบบแยก หากแอปมีกฎข้ามพร็อกซีที่ตั้งใจใช้ ให้คงกฎเหล่านั้นไว้อย่างชัดเจน