Proxy-IP használata PHP cURL-lel
Állíts be HTTP- vagy SOCKS-proxyt egy PHP cURL-kezelőn, tartsd külön a webhely URL-jét, és különítsd el az átviteli hibát a HTTP-választól.
Hagyd a webhelyet az curl_init() hívásban, és azon a kezelőn állítsd be a közvetítőt. A PHP-nak szüksége van a cURL-kiterjesztésre; a működő terminálos curl program nem bizonyítja a kiterjesztés elérhetőségét.
<?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;Cseréld a dokumentációs IP-t és portot a saját HTTP-proxydra vagy a HTTP-proxyk listájának egyik bejegyzésére. Az CURLOPT_NOPROXY törli a megkerülési szabályokat ehhez a teszthez; az CURLOPT_RETURNTRANSFER visszaadja a törzset ahelyett, hogy a böngészőnek küldené. A kapcsolati limit a felépítést, a teljes időkorlát a cURL-műveletet korlátozza.
SOCKS5-végpontnál cseréld le a HTTP-proxy beállításait az curl_exec() előtt:
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);Az CURLPROXY_SOCKS5_HOSTNAME a cél DNS-ét a SOCKS-szerverre bízza. Használd a megadott protokollt; a 1080-as port önmagában nem azonosítja. Egyik proxyválasztás sem igényli a webhely tanúsítvány-ellenőrzésének kikapcsolását.
Az $body === false feltételt szigorúan vizsgáld. Az üres törzs is lehet sikeres átvitel, míg az alagút még bármilyen webhelyválasz előtt meghibásodhat. Fordítva, nem üres törzs mellett is jöhet 403, 404 vagy 429. Az CURLINFO_RESPONSE_CODE értékét a cURL-hiba eredményével együtt olvasd, hogy eldönthesd, teljesíti-e a lezárt kérés a feladatodat.