L’authentification proxy a ses propres options cURL. Définir CURLOPT_USERPWD pour la connexion au site ne configure pas le compte du proxy, et choisir CURLOPT_HTTPAUTH ne sélectionne pas la méthode d’authentification 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;

Remplacez l’IP documentaire et utilisez les identifiants fournis pour ce proxy. Basic est choisi délibérément ici ; utilisez la méthode prise en charge et approuvée pour votre service, sans supposer qu’elle convient à tous les points.

Le champ combiné possède une règle d’encodage

La documentation libcurl indique que CURLOPT_PROXYUSERPWD décode en URL le nom d’utilisateur et le mot de passe. L’exemple encode chaque composant avant de les joindre avec le séparateur. C’est important lorsqu’une séquence de pourcentage littérale ou un autre caractère spécial appartient aux identifiants.

Les options séparées de nom d’utilisateur et de mot de passe proxy acceptent directement leurs valeurs :

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

Utilisez-les comme forme alternative d’identifiants avant d’exécuter la requête. N’appliquez pas automatiquement la règle de décodage du champ proxy combiné à CURLOPT_USERPWD ; libcurl documente une différence.

Séparer les étapes d’authentification

CURLOPT_PROXYAUTH sélectionne l’authentification proxy, tandis que CURLOPT_HTTPAUTH sélectionne l’authentification HTTP avec la destination. Si les deux exigent une connexion, configurez les options appropriées pour chacun plutôt que copier les mêmes identifiants aux deux endroits.

CURLAUTH_ANY autorise la négociation et peut ajouter un échange défi-réponse avant de choisir une méthode. Cela ne prouve pas que les identifiants sont corrects. Ajouter en plus manuellement un en-tête Proxy-Authorization peut perturber l’authentification gérée par la bibliothèque.

Les identifiants Basic envoyés au proxy en clair ne sont pas protégés par le tunnel TLS ultérieur du site. Examinez ce transport séparément pour choisir comment utiliser un service authentifié.

Articles similaires