Opzioni di autenticazione proxy in PHP cURL
Configura le credenziali proxy con le opzioni cURL corrette e gestisci la decodifica URL del campo combinato senza cambiare l’autenticazione di destinazione.
L’autenticazione proxy ha opzioni cURL proprie. Impostare CURLOPT_USERPWD per un sito non configura l’account del proxy e scegliere CURLOPT_HTTPAUTH non seleziona il metodo di autenticazione proxy.
<?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;
Sostituisci l’IP documentale e usa le credenziali fornite per quel proxy. Basic è scelto deliberatamente nell’esempio; usa il metodo supportato e approvato per il servizio, senza presumere che serva a ogni endpoint.
Il campo combinato ha una regola di codifica
libcurl documenta che CURLOPT_PROXYUSERPWD decodifica come URL nome utente e password. L’esempio codifica ogni componente prima di unirli con il delimitatore. È importante se una sequenza percentuale letterale o un altro carattere speciale appartiene alle credenziali.
Le opzioni separate per nome utente e password proxy accettano direttamente i rispettivi valori:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Usale come forma alternativa delle credenziali prima di eseguire la richiesta. Non applicare automaticamente la regola di decodifica del campo proxy combinato a CURLOPT_USERPWD; libcurl documenta una differenza.
Mantieni separate le tratte di autenticazione
CURLOPT_PROXYAUTH sceglie l’autenticazione proxy, mentre CURLOPT_HTTPAUTH sceglie quella HTTP con la destinazione. Se entrambe le parti richiedono accesso, configura le rispettive opzioni anziché copiare le stesse credenziali in entrambi i punti.
CURLAUTH_ANY consente la negoziazione e può aggiungere uno scambio challenge-response prima della scelta del metodo. Non dimostra che le credenziali siano corrette. Aggiungere anche un header Proxy-Authorization manuale può interferire con l’autenticazione gestita dalla libreria.
Le credenziali Basic su una connessione in chiaro al proxy non sono protette dal successivo tunnel TLS del sito. Controlla quel trasporto separatamente quando scegli come usare un servizio autenticato.