Kekalkan laman dalam curl_init() dan tetapkan perantara pada handle itu. PHP memerlukan sambungan cURL; program curl yang berfungsi di terminal tidak membuktikan sambungan itu 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;

Gantikan IP dan port dokumentasi dengan proksi HTTP anda atau entri daripada senarai proksi HTTP. CURLOPT_NOPROXY memadam peraturan pintasan untuk ujian ini; CURLOPT_RETURNTRANSFER mengembalikan isi respons dan bukannya menghantarnya ke pelayar. Had sambungan mengehadkan persediaan, manakala had masa keseluruhan mengehadkan operasi cURL.

Bagi titik akhir SOCKS5, gantikan pilihan proksi 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 menyerahkan DNS destinasi kepada pelayan SOCKS. Gunakan protokol yang dinyatakan; port 1080 sahaja tidak mengenal pastinya. Kedua-dua pilihan proksi tidak memerlukan pengesahan sijil laman dimatikan.

Uji $body === false secara ketat. Isi kosong boleh bermakna pemindahan berjaya, manakala kegagalan terowong boleh berlaku sebelum sebarang respons laman wujud. Sebaliknya, isi tidak kosong boleh hadir bersama 403, 404 atau 429. Baca CURLINFO_RESPONSE_CODE bersama hasil ralat cURL untuk menentukan sama ada permintaan selesai memenuhi tugas anda.

Artikel berkaitan