Proxy-authenticatieopties in PHP cURL
Configureer proxygegevens met de juiste cURL-opties en houd rekening met URL-decodering van het gecombineerde veld zonder doelauthenticatie te wijzigen.
Proxy-authenticatie heeft eigen cURL-opties. CURLOPT_USERPWD voor een websitelogin configureert niet het proxyaccount, en CURLOPT_HTTPAUTH kiest niet de proxy-authenticatiemethode.
<?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;
Vervang het documentatie-IP en gebruik de gegevens die voor die proxy zijn verstrekt. Basic is hier bewust gekozen; gebruik de ondersteunde en goedgekeurde methode van je dienst in plaats van aan te nemen dat elk eindpunt die nodig heeft.
Het gecombineerde veld heeft een coderingsregel
Volgens libcurl URL-decodeert CURLOPT_PROXYUSERPWD gebruikersnaam en wachtwoord. Het voorbeeld codeert beide delen vóór samenvoeging met het scheidingsteken. Dat telt als een letterlijke procentreeks of ander speciaal teken in de inloggegevens staat.
De aparte proxygebruikersnaam- en wachtwoordopties nemen hun waarden direct aan:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Gebruik deze als alternatief formaat vóór het uitvoeren van de aanvraag. Pas de decoderingsregel van het gecombineerde proxyveld niet automatisch toe op CURLOPT_USERPWD; libcurl beschrijft een verschil.
Houd authenticatietrajecten gescheiden
CURLOPT_PROXYAUTH kiest proxy-authenticatie, terwijl CURLOPT_HTTPAUTH HTTP-authenticatie met de bestemming kiest. Vereisen beide partijen login, stel dan voor elk de juiste opties in in plaats van dezelfde gegevens naar beide plaatsen te kopiëren.
CURLAUTH_ANY staat onderhandeling toe en kan vóór de methodekeuze een challenge-response-uitwisseling toevoegen. Het bewijst niet dat de inloggegevens kloppen. Een extra handmatig Proxy-Authorization-header kan de authenticatieafhandeling van de bibliotheek verstoren.
Basic-gegevens op een onversleutelde verbinding met de proxy worden niet beschermd door de latere TLS-tunnel van de website. Controleer dat transport apart bij de keuze hoe je een geauthenticeerde dienst gebruikt.