Saytni curl_init() ichida qoldiring va vositachini shu tutqichda sozlang. PHP-ga cURL kengaytmasi kerak; terminalda ishlaydigan curl dasturi kengaytma borligini isbotlamaydi.

<?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;

Hujjatdagi IP va portni HTTP proksingiz yoki HTTP proksilar ro‘yxatidagi yozuv bilan almashtiring. CURLOPT_NOPROXY bu sinov uchun chetlab o‘tish qoidalarini tozalaydi; CURLOPT_RETURNTRANSFER javob tanasini brauzerga yuborish o‘rniga qaytaradi. Ulanish chegarasi o‘rnatishni, umumiy vaqt chegarasi cURL amalini cheklaydi.

SOCKS5 oxirgi nuqtasi uchun HTTP proksi parametrlarini curl_exec() dan oldin almashtiring:

curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME manzil DNS-ini SOCKS serveriga topshiradi. Ko‘rsatilgan protokoldan foydalaning; 1080 portining o‘zi uni aniqlamaydi. Hech bir proksi tanlovi sayt sertifikati tekshiruvini o‘chirishni talab qilmaydi.

$body === false ni qat’iy tekshiring. Bo‘sh tana muvaffaqiyatli uzatish bo‘lishi mumkin, ammo tunnel xatosi saytdan hech qanday javob kelmasidan oldin yuz berishi mumkin. Aksincha, bo‘sh bo‘lmagan tana 403, 404 yoki 429 bilan kelishi mumkin. Yakunlangan so‘rov vazifangizni bajarishini bilish uchun CURLINFO_RESPONSE_CODE ni cURL xato natijasi bilan birga o‘qing.

O'xshash maqolalar