Eine Proxy-IP mit PHP cURL verwenden
Setze einen HTTP- oder SOCKS-Proxy am PHP-cURL-Handle, halte die Website-URL getrennt und unterscheide Transportfehler von HTTP-Antworten.
Belasse die Website in curl_init() und setze den Vermittler an diesem Handle. PHP benötigt seine cURL-Erweiterung; ein funktionierendes curl-Programm im Terminal belegt nicht, dass die Erweiterung verfügbar ist.
<?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;Ersetze die Dokumentations-IP und den Port durch deinen HTTP-Proxy oder einen Eintrag aus der HTTP-Proxy-Liste. CURLOPT_NOPROXY löscht Umgehungsregeln für diesen Test; CURLOPT_RETURNTRANSFER gibt den Inhalt zurück, statt ihn an den Browser auszugeben. Das Verbindungslimit begrenzt den Aufbau, das Gesamtzeitlimit die cURL-Operation.
Ersetze für einen SOCKS5-Endpunkt die HTTP-Proxy-Optionen vor curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME überträgt die DNS-Auflösung des Ziels an den SOCKS-Server. Verwende das angegebene Protokoll; Port 1080 allein identifiziert es nicht. Keine der beiden Proxyvarianten erfordert, die Zertifikatsprüfung der Website abzuschalten.
Prüfe $body === false strikt. Ein leerer Inhalt kann eine erfolgreiche Übertragung sein, während ein Tunnel scheitern kann, bevor überhaupt eine Website-Antwort vorliegt. Umgekehrt kann nichtleerer Inhalt mit 403, 404 oder 429 einhergehen. Lies CURLINFO_RESPONSE_CODE zusammen mit dem cURL-Fehlerergebnis, um zu entscheiden, ob die abgeschlossene Anfrage deine Aufgabe erfüllt.