Opcions d’autenticació proxy a PHP cURL
Configureu credencials proxy amb les opcions cURL correctes i gestioneu la descodificació URL del camp combinat sense canviar l’autenticació de destinació.
L’autenticació proxy té opcions cURL pròpies. Establir CURLOPT_USERPWD per a un web no configura el compte del proxy, i triar CURLOPT_HTTPAUTH no selecciona el mètode d’autenticació 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;
Substituïu la IP documental i utilitzeu les credencials facilitades per a aquell proxy. Basic s’ha triat intencionadament a l’exemple; feu servir el mètode admès i aprovat per al servei, sense suposar que tots els punts el necessiten.
El camp combinat té una regla de codificació
libcurl documenta que CURLOPT_PROXYUSERPWD descodifica com a URL el nom d’usuari i la contrasenya. L’exemple codifica cada component abans d’unir-los amb el delimitador. Això importa si una seqüència literal de percentatge o un altre caràcter especial pertany a les credencials.
Les opcions separades d’usuari i contrasenya proxy accepten directament els valors:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Utilitzeu-les com a forma alternativa abans d’executar la petició. No apliqueu automàticament la regla de descodificació del camp proxy combinat a CURLOPT_USERPWD; libcurl documenta una diferència.
Manteniu separats els trams d’autenticació
CURLOPT_PROXYAUTH tria l’autenticació proxy, mentre CURLOPT_HTTPAUTH tria l’autenticació HTTP amb la destinació. Si tots dos requereixen sessió, configureu les opcions de cadascun en lloc de copiar la mateixa credencial als dos llocs.
CURLAUTH_ANY permet negociar i pot afegir un intercanvi repte-resposta abans de triar el mètode. No demostra que les credencials siguin correctes. Afegir també manualment una capçalera Proxy-Authorization pot interferir amb l’autenticació de la biblioteca.
Les credencials Basic en una connexió en text clar al proxy no estan protegides pel túnel TLS posterior del web. Comproveu aquest transport per separat quan trieu com utilitzar un servei autenticat.