Pidä verkkosivusto kohdassa curl_init() ja aseta välittäjä kyseiseen kahvaan. PHP tarvitsee cURL-laajennuksensa; toimiva komentorivin curl-ohjelma ei osoita laajennuksen olevan saatavilla.

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

Korvaa dokumentaation IP ja portti omalla HTTP-välityspalvelimellasi tai merkinnällä HTTP-välityspalvelinten luettelosta. CURLOPT_NOPROXY tyhjentää ohitussäännöt tätä testiä varten; CURLOPT_RETURNTRANSFER palauttaa sisällön sen sijaan että lähettäisi sen selaimelle. Yhteysraja rajoittaa muodostamista ja kokonaisaikaraja cURL-toimintoa.

Korvaa SOCKS5-päätepistettä varten HTTP-välityspalvelinasetukset ennen kohtaa curl_exec():

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

CURLPROXY_SOCKS5_HOSTNAME siirtää kohteen DNS:n SOCKS-palvelimelle. Käytä ilmoitettua protokollaa; pelkkä portti 1080 ei tunnista sitä. Kumpikaan välityspalvelinvalinta ei vaadi sivuston varmenteen tarkistuksen poistamista käytöstä.

Testaa $body === false tarkasti. Tyhjä sisältö voi merkitä onnistunutta siirtoa, kun taas tunneli voi epäonnistua ennen minkäänlaista sivuston vastausta. Toisaalta ei-tyhjään sisältöön voi liittyä 403, 404 tai 429. Lue CURLINFO_RESPONSE_CODE yhdessä cURLin virhetuloksen kanssa ratkaistaksesi, palveleeko valmistunut pyyntö tehtävääsi.

Aiheeseen liittyvät artikkelit