Gunakan IP proxy dengan PHP cURL
Atur proxy HTTP atau SOCKS pada handle PHP cURL, pisahkan URL situs, dan bedakan kesalahan transport dari respons HTTP.
Pertahankan situs di curl_init() dan atur perantara pada handle itu. PHP memerlukan ekstensi cURL; program curl yang bekerja di terminal tidak membuktikan ekstensi tersedia.
<?php
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
CURLOPT_PROXY => 'http://203.0.113.10:8080',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_NOPROXY => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
echo $body;Ganti IP dan port dokumentasi dengan proxy HTTP Anda atau entri dari daftar proxy HTTP. CURLOPT_NOPROXY menghapus aturan bypass untuk pengujian ini; CURLOPT_RETURNTRANSFER mengembalikan isi respons alih-alih mengirimnya ke browser. Batas koneksi membatasi penyiapan, sedangkan batas waktu keseluruhan membatasi operasi cURL.
Untuk endpoint SOCKS5, ganti opsi proxy HTTP sebelum curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME mendelegasikan DNS tujuan ke server SOCKS. Gunakan protokol yang dinyatakan; port 1080 saja tidak mengidentifikasinya. Kedua pilihan proxy tidak memerlukan penonaktifan verifikasi sertifikat situs.
Uji $body === false secara ketat. Isi kosong bisa berarti transfer berhasil, sementara kegagalan terowongan bisa terjadi sebelum ada respons situs. Sebaliknya, isi yang tidak kosong bisa menyertai 403, 404, atau 429. Baca CURLINFO_RESPONSE_CODE bersama hasil kesalahan cURL untuk menentukan apakah permintaan selesai memenuhi tugas Anda.