Prokurila aŭtentikigo havas proprajn cURL-opciojn. CURLOPT_USERPWD por reteja ensaluto ne agordas la konton de la prokurilo, kaj CURLOPT_HTTPAUTH ne elektas prokurilan aŭtentikigan metodon.

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

Anstataŭigu la dokumentan IP kaj uzu la akreditaĵojn provizitajn por tiu prokurilo. Basic estas intence elektita en la ekzemplo; uzu la metodon subtenatan kaj aprobitan por la servo, ne supozante ke ĉiu finpunkto bezonas ĝin.

La kombinita kampo havas kodan regulon

libcurl dokumentas, ke CURLOPT_PROXYUSERPWD URL-malkodas la uzantnomon kaj pasvorton. La ekzemplo kodas ĉiun parton antaŭ kunigo per la apartigilo. Tio gravas kiam laŭvorta procenta sekvenco aŭ alia speciala signo apartenas al la akreditaĵo.

La apartaj opcioj por prokurila uzantnomo kaj pasvorto akceptas siajn valorojn rekte:

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

Uzu ilin kiel alternativan formon antaŭ ol plenumi la peton. Ne aŭtomate apliku la malkodan regulon de la kombinita prokurila kampo al CURLOPT_USERPWD; libcurl dokumentas diferencon.

Konservu la aŭtentikigajn etapojn apartaj

CURLOPT_PROXYAUTH elektas prokurilan aŭtentikigon, dum CURLOPT_HTTPAUTH elektas HTTP-aŭtentikigon kun la celo. Se ambaŭ postulas ensaluton, agordu ĝustajn opciojn por ĉiu anstataŭ kopii samajn akreditaĵojn al ambaŭ lokoj.

CURLAUTH_ANY permesas intertraktadon kaj povas aldoni defio-respondo-interŝanĝon antaŭ elekto de metodo. Ĝi ne pruvas ĝustajn akreditaĵojn. Plia mana Proxy-Authorization-kapo povas ĝeni la aŭtentikigan traktadon de la biblioteko.

Basic-akreditaĵojn sur klarteksta konekto al la prokurilo ne protektas la posta TLS-tunelo de la retejo. Kontrolu tiun transporton aparte dum elekto de uzo de aŭtentikigita servo.

Rilataj artikoloj