وقتی WinHTTP بین 407 و 401 جابهجا میشود
وضعیت احراز هویت پراکسی انتخابشده را حفظ کنید و پیش از تلاش دوباره آن را بازاعمال کنید، در حالی که چالش جداگانه مقصد را نیز مدیریت میکنید.
یک درخواست WinHTTP به پراکسی احراز هویت میکند، 401 وبسایت را دریافت میکند و سپس در ارسال بعدی 407 دیگری میگیرد. پراکسی و وبسایت وضعیت احراز هویت جداگانه دارند و مسیر ارسال دوباره باید هر دو را نگه دارد.
نمونه بومی احراز هویت WinHTTP از مایکروسافت، طرح پراکسی انتخابشده را در یک متغیر نگه میدارد و پس از انتخاب آن طرح، پیش از هر WinHttpSendRequest حساب پراکسی را دوباره اعمال میکند.
- درخواست را بفرستید و پاسخ را بررسی کنید.
- برای 407، طرحهای ارائهشده را بپرسید و طرح پراکسی انتخابشده را به یاد بسپارید.
- پیش از ارسال دوباره، برای WINHTTP_AUTH_TARGET_PROXY تابع WinHttpSetCredentials را فراخوانی کنید با همان طرح و حساب.
- برای 401 مقصد، طرح آن را بگیرید و اعتبارنامههای سرور را تنظیم کنید و در همان حال وضعیت ذخیرهشده پراکسی را برای ارسال بعدی نگه دارید.
نمونه بهطور خاص احراز هویت دوباره پس از چالش سرور یا تغییر مسیر را دلیل بازاعمال اعتبارنامههای پراکسی میداند. قرار دادن فراخوانی فقط در شاخه نخست 407 میتواند مسیر دیگری برای تلاش دوباره را بدون آمادهسازی مورد انتظار بگذارد.
هر نتیجه API را بررسی کنید و خطاهای تکراری را محدود نگه دارید. نمونه فشرده مایکروسافت وضعیت پیشین را ردیابی میکند، در حالی که سیاست تلاش دوباره در محیط عملیاتی باید توالی متناوب تکراری را هم تشخیص دهد.
اگر کاربر پس از خطا حساب جایگزینی ارائه کند، مقادیری را که آن مسیر ارسال دوباره استفاده میکند بهروزرسانی کنید. WinHttpSetCredentials در محدوده درخواست است؛ انبار رمز عبور در سطح فرایند نیست که محتوایش برای همه درخواستهای آینده جایگزین شود.