Proxy autentifikavimas turi atskiras cURL parinktis. Svetainės prisijungimui nustatytas CURLOPT_USERPWD nekonfigūruoja proxy paskyros, o CURLOPT_HTTPAUTH nepasirenka proxy autentifikavimo metodo.

<?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;

Pakeiskite dokumentacijos IP ir naudokite tam proxy pateiktus duomenis. Basic čia pasirinktas sąmoningai; naudokite paslaugos palaikomą ir patvirtintą metodą, nemanydami, kad jo reikia visiems taškams.

Jungtinis laukas turi kodavimo taisyklę

libcurl dokumentuoja, kad CURLOPT_PROXYUSERPWD URL dekoduoja vardą ir slaptažodį. Pavyzdys koduoja kiekvieną dalį prieš sujungiant skirtuku. Tai svarbu, kai duomenyse yra pažodinė procentinė seka ar kitas specialus simbolis.

Atskiros proxy vardo ir slaptažodžio parinktys priima reikšmes tiesiogiai:

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

Naudokite jas kaip alternatyvią duomenų formą prieš vykdydami užklausą. Netaikykite jungtinio proxy lauko dekodavimo taisyklės automatiškai CURLOPT_USERPWD; libcurl dokumentuoja skirtumą.

Atskirkite autentifikavimo etapus

CURLOPT_PROXYAUTH pasirenka proxy autentifikavimą, o CURLOPT_HTTPAUTH HTTP autentifikavimą su tikslu. Jei prisijungti reikalauja abu, kiekvienam nustatykite tinkamas parinktis, nekopijuodami tų pačių duomenų į abi vietas.

CURLAUTH_ANY leidžia derėtis ir gali pridėti iššūkio-atsakymo mainus prieš metodo pasirinkimą. Jis neįrodo, kad duomenys teisingi. Papildoma rankinė Proxy-Authorization antraštė gali trikdyti bibliotekos autentifikavimo tvarkymą.

Basic duomenų nešifruotame ryšyje su proxy neapsaugo vėlesnis svetainės TLS tunelis. Tikrinkite tą transportą atskirai rinkdamiesi autentifikuojamos paslaugos naudojimą.

Susiję straipsniai