May sariling cURL options ang proxy authentication. Hindi kino-configure ng CURLOPT_USERPWD para sa website login ang proxy account, at hindi pinipili ng CURLOPT_HTTPAUTH ang proxy authentication method.

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

Palitan ang dokumentasyong IP at gamitin ang credentials na ibinigay para sa proxy na iyon. Sadyang pinili ang Basic dito; gamitin ang paraang suportado at aprubado para sa serbisyo sa halip na isiping kailangan ito ng lahat ng endpoint.

May encoding rule ang pinagsamang field

Ayon sa libcurl, inu-URL-decode ng CURLOPT_PROXYUSERPWD ang username at password. Ine-encode ng halimbawa ang bawat bahagi bago pagsamahin gamit ang delimiter. Mahalaga ito kung may literal na percent sequence o ibang special character sa credentials.

Direktang tinatanggap ng magkahiwalay na proxy username at password options ang mga value nila:

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

Gamitin ang mga ito bilang alternatibong credentials bago i-execute ang request. Huwag awtomatikong ilapat sa CURLOPT_USERPWD ang decoding rule ng combined proxy field; dokumentado ng libcurl ang pagkakaiba.

Paghiwalayin ang authentication hops

Pinipili ng CURLOPT_PROXYAUTH ang proxy authentication, at ng CURLOPT_HTTPAUTH ang HTTP authentication sa destinasyon. Kung parehong nangangailangan ng login, itakda ang angkop na options para sa bawat isa sa halip na kopyahin ang parehong credentials sa dalawang lugar.

Pinapayagan ng CURLAUTH_ANY ang negotiation at maaaring magdagdag ng challenge-response exchange bago pumili ng method. Hindi nito pinapatunayang tama ang credentials. Maaaring makagambala sa authentication handling ng library ang pagdagdag din ng manual Proxy-Authorization header.

Hindi pinoprotektahan ng kasunod na TLS tunnel ng website ang Basic credentials sa cleartext connection sa proxy. Suriin nang hiwalay ang transport na iyon kapag pumipili kung paano gagamit ng authenticated service.

Kaugnay na mga artikulo