Menetapkan IP proxy untuk permintaan Guzzle
Gunakan opsi proxy per permintaan Guzzle dan pahami timeout koneksi yang bergantung pada handler serta daftar bypass eksplisit.
Opsi proxy Guzzle menerima URL endpoint lengkap. Tetapkan pada permintaan jika hanya operasi itu yang harus memakai IP pilihan Anda.
<?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();
Contoh mengasumsikan Guzzle 7 dipasang melalui Composer. Ganti alamat dokumentasi dengan proxy HTTP nyata dari penyedia atau daftar proxy HTTP. Pertahankan tujuan dalam URL permintaan: proxy adalah perantara, bukan sumber daya yang diunduh.
Di sini http_errors bernilai false agar respons kesalahan HTTP tetap tersedia untuk diperiksa. Kegagalan koneksi tetap melempar pengecualian transfer. Karena itu, tunnel HTTPS yang ditolak saat dibentuk dapat gagal sebelum Anda menerima objek respons situs biasa.
Periksa handler jika batas koneksi berperilaku berbeda
Guzzle dapat memakai beberapa handler HTTP. Dokumentasinya menyatakan handler cURL bawaan mendukung connect_timeout. Handler khusus atau lingkungan tanpa PHP cURL belum tentu setara. Periksa handler aplikasi sebelum menganggap opsi timeout yang disalin benar-benar berlaku.
timeout keseluruhan juga sebaiknya ditetapkan. Entri daftar gratis dapat berhenti menjawab di antara pemeriksaan, dan nilai bawaan bukan tenggat yang berguna untuk permintaan yang harus cepat selesai.
Menggunakan peta proxy
Peta memungkinkan pemilihan rute berdasarkan skema tujuan dan pemberian host bypass secara eksplisit:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Gunakan array ini menggantikan opsi string. Kunci HTTPS memilih tujuan HTTPS; nilai HTTP-nya masih menjelaskan listener proxy. Protokol listener berbeda memerlukan konfigurasi endpoint berbeda.
Saat Anda sendiri menyediakan opsi proxy permintaan, Guzzle mengharapkan Anda juga memberi nilai no yang dimaksud, bukan menyalinnya otomatis dari NO_PROXY. Daftar kosong berguna untuk pengujian proxy terisolasi. Jika aplikasi punya aturan bypass yang disengaja, pertahankan aturan itu secara eksplisit.