برای یک پروکسی HTTP که احراز هویت پایه ارائه می‌دهد، proxyAuthenticator در OkHttp می‌تواند درخواستی حاوی اعتبارنامه برگرداند. پس از اینکه یک تلاش مجوز قبلاً رد شد، به‌جای ارسال دوباره همان پاسخ، null را برگردانید:

.proxyAuthenticator { _, response ->
    if (response.request.header("Proxy-Authorization") != null) {
        null
    } else {
        response.request.newBuilder()
            .header("Proxy-Authorization",
                    Credentials.basic(proxyUser, proxyPassword))
            .build()
    }
}

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

اگر نتیجه نهایی همچنان 407 باقی ماند، پروکسی انتخاب‌شده، طرح اعلام‌شده و هویت حساب مستند را مقایسه کنید. گذرواژه ردشده، روش پشتیبانی‌نشده و شکل نادرست نام کاربری اصلاحات متفاوتی نیاز دارند. آن مشاهدات و وضعیت نهایی را در تشخیص‌های ویرایش‌شده نگه دارید.

CONNECT زمینه پاسخ‌به‌تماس دیگری دارد: OkHttp یک چالش احراز هویت پروکسی پیش‌دستانه مصنوعی را پیش از باز کردن تونل مستند می‌کند. آن زمینه را مطابق API مدیریت کنید، نه اینکه فرض کنید هر پاسخ‌به‌تماس یک پاسخ عادی مقصد است.

authenticator جداگانه برای احراز هویت سرور مقصد است. اعتبارنامه آن را از ورود پروکسی جدا نگه دارید؛ یک رهگیر عمومی که گذرواژه پروکسی را روی هر درخواست خروجی قرار می‌دهد می‌تواند آن را در دامنه اشتباه ارسال کند.

گزارش‌های تاریخی نیز اشکالات پیاده‌سازی را توصیف می‌کنند، از جمله پردازش بدنه پاسخ ردشده پروکسی. پیش از نسبت دادن یک خرابی فعلی به گزارش قدیمی، نسخه OkHttp و تبادل نهایی را ثبت کنید. تصمیم تکرار باید همچنان یک تلاش اعتبارنامه بدون تغییر را که پاسخ جدید مفیدی ندارد متوقف کند.

مقالات مرتبط