La autenticación proxy tiene sus propias opciones cURL. Establecer CURLOPT_USERPWD para un sitio no configura la cuenta del proxy, y elegir CURLOPT_HTTPAUTH no selecciona el método de autenticación 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;

Sustituye la IP documental y usa las credenciales proporcionadas para ese proxy. Aquí se eligió Basic deliberadamente; usa el método compatible y aprobado para tu servicio, sin suponer que todo punto lo necesita.

El campo combinado tiene una regla de codificación

libcurl documenta que CURLOPT_PROXYUSERPWD decodifica como URL el usuario y la contraseña. El ejemplo codifica cada componente antes de unirlos con el delimitador. Esto importa si una secuencia literal de porcentaje u otro carácter especial forma parte de las credenciales.

Las opciones separadas de usuario y contraseña proxy aceptan directamente sus valores:

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

Úsalas como forma alternativa de credenciales antes de ejecutar la solicitud. No apliques automáticamente la regla de decodificación del campo proxy combinado a CURLOPT_USERPWD; libcurl documenta una diferencia.

Mantén separados los saltos de autenticación

CURLOPT_PROXYAUTH selecciona autenticación proxy, mientras CURLOPT_HTTPAUTH selecciona autenticación HTTP con el destino. Si ambos requieren login, configura las opciones de cada uno en vez de copiar la misma credencial a los dos lugares.

CURLAUTH_ANY permite negociar y puede añadir un intercambio desafío-respuesta antes de seleccionar método. No prueba que las credenciales sean correctas. Añadir además manualmente una cabecera Proxy-Authorization puede interferir con la autenticación de la biblioteca.

Las credenciales Basic en una conexión en claro al proxy no están protegidas por el túnel TLS posterior del sitio. Comprueba ese transporte por separado al elegir cómo usar un servicio autenticado.

Artículos relacionados