Proxy-Authentifizierung hat eigene cURL-Optionen. CURLOPT_USERPWD für eine Website-Anmeldung konfiguriert nicht das Proxy-Konto, und CURLOPT_HTTPAUTH wählt nicht die Proxy-Authentifizierungsmethode.

<?php
$user = 'proxy-user';
$password = getenv('PROXY_PASSWORD');
if ($password === false) {
    throw new RuntimeException('Set PROXY_PASSWORD');
}

$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://203.0.113.10:8080',
    CURLOPT_NOPROXY => '',
    CURLOPT_PROXYUSERPWD =>
        rawurlencode($user) . ':' . rawurlencode($password),
    CURLOPT_PROXYAUTH => CURLAUTH_BASIC,
    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;

Die Dokumentations-IP ersetzen und die für diesen Proxy bereitgestellten Zugangsdaten verwenden. Basic ist hier bewusst gewählt; verwenden Sie die unterstützte und genehmigte Methode Ihres Dienstes, statt sie bei jedem Endpunkt vorauszusetzen.

Das kombinierte Feld hat eine Kodierungsregel

Laut libcurl-Dokumentation dekodiert CURLOPT_PROXYUSERPWD Benutzername und Passwort als URL. Das Beispiel kodiert beide Teile vor dem Zusammenfügen mit dem Trennzeichen. Das zählt, wenn eine wörtliche Prozentsequenz oder ein anderes Sonderzeichen zu den Zugangsdaten gehört.

Die getrennten Proxy-Benutzernamen- und Passwortoptionen nehmen ihre Werte direkt entgegen:

curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);

Diese vor Ausführung der Anfrage als alternative Zugangsdatenform verwenden. Die Dekodierungsregel des kombinierten Proxyfelds nicht automatisch auf CURLOPT_USERPWD übertragen; libcurl dokumentiert einen Unterschied.

Die Authentifizierungsstrecken getrennt halten

CURLOPT_PROXYAUTH wählt Proxy-Authentifizierung, CURLOPT_HTTPAUTH dagegen HTTP-Authentifizierung zum Ziel. Benötigen beide Seiten eine Anmeldung, für jede passende Optionen setzen, statt dieselben Zugangsdaten an beide Stellen zu kopieren.

CURLAUTH_ANY erlaubt Aushandlung und kann vor der Methodenwahl einen Challenge-Response-Austausch hinzufügen. Es beweist keine korrekten Zugangsdaten. Ein zusätzlicher manueller Proxy-Authorization-Header kann die Authentifizierungsbehandlung der Bibliothek stören.

Basic-Zugangsdaten auf einer Klartextverbindung zum Proxy werden nicht durch den späteren TLS-Tunnel der Website geschützt. Bei der Wahl einer authentifizierten Dienstnutzung diesen Transport getrennt prüfen.

Ähnliche Artikel