Păstrează site-ul în curl_init() și setează intermediarul pe acel handle. PHP are nevoie de extensia cURL; un executabil curl funcțional în terminal nu dovedește disponibilitatea extensiei.

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

Înlocuiește IP-ul și portul de documentație cu proxy-ul tău HTTP sau cu o intrare din lista de proxy-uri HTTP. CURLOPT_NOPROXY șterge regulile de ocolire pentru acest test; CURLOPT_RETURNTRANSFER returnează corpul în loc să îl trimită browserului. Limita de conectare restrânge stabilirea, iar timpul limită general limitează operația cURL.

Pentru un punct SOCKS5, înlocuiește opțiunile proxy HTTP înainte de curl_exec():

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

CURLPROXY_SOCKS5_HOSTNAME delegă DNS-ul destinației serverului SOCKS. Folosește protocolul declarat; doar portul 1080 nu îl identifică. Niciuna dintre opțiuni nu cere dezactivarea verificării certificatului site-ului.

Testează $body === false strict. Un corp gol poate fi un transfer reușit, în timp ce un tunel poate eșua înainte să existe vreun răspuns al site-ului. Invers, un corp nevid poate însoți 403, 404 sau 429. Citește CURLINFO_RESPONSE_CODE alături de rezultatul de eroare cURL ca să decizi dacă cererea încheiată îți servește sarcina.

Articole similare