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

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