Uwierzytelnianie proxy ma własne opcje cURL. Ustawienie CURLOPT_USERPWD dla witryny nie konfiguruje konta proxy, a CURLOPT_HTTPAUTH nie wybiera metody uwierzytelniania 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;

Zastąp dokumentacyjne IP i użyj danych dostarczonych dla tego proxy. Basic wybrano tu celowo; używaj metody obsługiwanej i zatwierdzonej dla usługi, nie zakładając, że każdy punkt jej potrzebuje.

Pole łączone ma regułę kodowania

libcurl dokumentuje, że CURLOPT_PROXYUSERPWD dekoduje nazwę i hasło jak URL. Przykład koduje każdy składnik przed połączeniem separatorem. To ważne, gdy dosłowna sekwencja procentowa lub inny znak specjalny należy do danych.

Osobne opcje nazwy użytkownika i hasła proxy przyjmują wartości bezpośrednio:

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

Użyj ich jako alternatywnego formatu danych przed wykonaniem żądania. Nie przenoś automatycznie reguły dekodowania łączonego pola proxy na CURLOPT_USERPWD; libcurl opisuje różnicę.

Rozdziel odcinki uwierzytelniania

CURLOPT_PROXYAUTH wybiera uwierzytelnianie proxy, a CURLOPT_HTTPAUTH HTTP wobec celu. Jeśli obie strony wymagają logowania, skonfiguruj właściwe opcje dla każdej zamiast kopiować te same dane w oba miejsca.

CURLAUTH_ANY pozwala negocjować i może dodać wymianę wyzwanie–odpowiedź przed wyborem metody. Nie dowodzi poprawności danych. Dodatkowe ręczne dodanie nagłówka Proxy-Authorization może zakłócić uwierzytelnianie obsługiwane przez bibliotekę.

Dane Basic na jawnym połączeniu do proxy nie są chronione późniejszym tunelem TLS witryny. Sprawdź ten transport osobno, wybierając sposób używania uwierzytelnianej usługi.

Powiązane artykuły