احراز هویت پراکسی گزینه‌های cURL جداگانه دارد. تنظیم CURLOPT_USERPWD برای ورود سایت، حساب پراکسی را تنظیم نمی‌کند و CURLOPT_HTTPAUTH روش احراز هویت پراکسی را انتخاب نمی‌کند.

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

IP مستندات را عوض کنید و اطلاعات داده‌شده برای همان پراکسی را به کار ببرید. Basic در این مثال عمدی انتخاب شده؛ روش پشتیبانی‌شده و تأییدشدهٔ سرویس را به کار ببرید، نه اینکه فرض کنید همهٔ نقطه‌ها به آن نیاز دارند.

فیلد ترکیبی یک قاعدهٔ کدگذاری دارد

libcurl می‌گوید CURLOPT_PROXYUSERPWD نام کاربری و گذرواژه را URL-decode می‌کند. مثال هر جزء را پیش از اتصال با جداکننده کدگذاری می‌کند. وقتی رشتهٔ درصدِ واقعی یا نویسهٔ ویژهٔ دیگر جزئی از اطلاعات ورود است، این مهم است.

گزینه‌های جداگانهٔ نام کاربری و گذرواژهٔ پراکسی مقدارشان را مستقیم می‌پذیرند:

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

پیش از اجرای درخواست از آن‌ها به‌عنوان شکل جایگزین اطلاعات استفاده کنید. قاعدهٔ رمزگشایی فیلد ترکیبی پراکسی را خودکار به CURLOPT_USERPWD تعمیم ندهید؛ libcurl تفاوت را مستند کرده است.

مرحله‌های احراز هویت را جدا نگه دارید

CURLOPT_PROXYAUTH احراز هویت پراکسی را انتخاب می‌کند و CURLOPT_HTTPAUTH احراز هویت HTTP با مقصد را. اگر هر دو ورود می‌خواهند، برای هرکدام گزینهٔ مناسب بدهید، نه اینکه یک اطلاعات را در هر دو جا کپی کنید.

CURLAUTH_ANY مذاکره را مجاز می‌کند و ممکن است پیش از انتخاب روش تبادل چالش-پاسخ اضافه کند. درست بودن اطلاعات را ثابت نمی‌کند. افزودن دستی سربرگ Proxy-Authorization در کنار آن ممکن است با مدیریت احراز هویت کتابخانه تداخل کند.

اطلاعات Basic در اتصال متن آشکار به پراکسی با تونل TLS بعدی سایت محافظت نمی‌شود. هنگام انتخاب استفاده از سرویس دارای احراز هویت، آن انتقال را جدا بررسی کنید.

مقالات مرتبط