Tenu la retejon en curl_init() kaj agordu la peranton ĉe tiu tenilo. PHP bezonas sian cURL-etendaĵon; funkcianta terminala curl-programo ne pruvas ke la etendaĵo disponeblas.

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

Anstataŭigu la dokumentan IP kaj pordon per via HTTP-prokurilo aŭ ero el la listo de HTTP-prokuriloj. CURLOPT_NOPROXY forigas preterirajn regulojn por ĉi tiu testo; CURLOPT_RETURNTRANSFER redonas la korpon anstataŭ sendi ĝin al la retumilo. La konektolimo limigas starigon kaj la ĝenerala tempolimo limigas la cURL-operacion.

Por SOCKS5-finpunkto anstataŭigu la HTTP-prokurilajn opciojn antaŭ curl_exec():

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

CURLPROXY_SOCKS5_HOSTNAME delegas la celan DNS al la SOCKS-servilo. Uzu la deklaritan protokolon; pordo 1080 sola ne povas identigi ĝin. Nek prokurila elekto postulas malŝalti la retejan atestilkontrolon.

Testu $body === false strikte. Malplena korpo povas esti sukcesa transdono, dum tunela malsukceso povas okazi antaŭ ekzisto de iu reteja respondo. Male, nemalplena korpo povas akompani 403, 404 aŭ 429. Legu CURLINFO_RESPONSE_CODE kune kun la erarrezulto de cURL por decidi ĉu la finita peto servas vian taskon.

Rilataj artikoloj