سؤال

أنا أعمل مع خدمة ويب تتطلب اسم مستخدم/كلمة مرور صالحة.من PyQt، أقوم بالوصول إلى خدمة الويب باستخدام QNetworkAccessManager الذي ينبعث ملف

authenticationRequired (QNetworkReply*, QAuthenticator*)

إشارة عندما (من الواضح)، مطلوب المصادقة.عندما أقوم بملء المستخدم و PSSWD لـ Qauthenticator ، فإن كل شيء يعمل بشكل جيد.ومع ذلك، لا أستطيع أن أرى كيفية كسر الحلقة عندما يكون المستخدم كذلك لا صالح.

من المستندات للمصادقةالمطلوبة:

"إذا رفضت أوراق الاعتماد، فسيتم بث هذه الإشارة مرة أخرى."

لبيانات الاعتماد غير صالحة ، تنبعث هذه الإشارة مرة أخرى ، ومرة ​​أخرى ، مرة أخرى ...أظهر النظر إلى رمز الخطأ في الرد 0.كيف من المفترض أن يتم كسر هذه الحلقة أو التعامل معها بحيث تنتهي بخطأ؟

هل كانت مفيدة؟

المحلول

نعم، هذا غريب.ما قمت به سابقًا هو التحقق مما إذا كنت قد قمت بالفعل بالمصادقة بهذه التفاصيل وما إذا كنت قد اتصلت بها أم لا QNetworkReply.abort()

نصائح أخرى

ماذا عن المحاولة:

QNetworkReply::abort()

أو

QNetworkReply::close()

?

الاتصال QNetworkReply::abort() سيؤدي إلى فشل الطلب بسبب الخطأ "تم إحباط العملية" بدلاً من الخطأ 401 الأصلي.يبدو أن الشيء الصحيح الذي يجب فعله الآن هو عدم الاتصال QAuthenticator::setUser() أو QAuthenticator::setPassword() داخل الخاص بك authenticationRequired() فتحة.هذا سوف يترك QAuthenticatorPrivate::phase مثل Done مما سيؤدي إلى إنهاء الطلب بشكل نظيف باستخدام رمز الخطأ الصحيح.

وثائق كيو تي غير واضحة إلى حد ما في هذه النقطة.

لا يبدو أن هذا هو السلوك في Qt 4.7، وتم تقديمه في مرحلة ما في Qt 4.8.

إذا عدت من فتحة متصلة بـ &QNetworkAccessManager::proxyAuthenticationRequired دون استدعاء أي أسلوب QAuthenticator، فسيتم إحباط الطلب باستخدام كود HTTP الحقيقي (على سبيل المثال.401 أو 407).

على سبيل المثال، يمكنك الاتصال بـ QAuthenticator::setUser وsetPassword عندما ينقر المستخدم على "موافق" ولا يتصل بأي شيء عندما ينقر على "إلغاء الأمر".هذا كل شئ :-)

وينطبق هذا أيضًا على الفتحات المتصلة بـ &QNetworkAccessManager::authenticationRequired (حيث لا يتعين عليك الاتصال بـ QNetworkReply::abort()، يمكنك ببساطة استدعاء أي أسلوب QAuthenticator على الإطلاق، والذي يحافظ على كود HTTP أيضًا، بينما يؤدي استدعاء abort() إلى تغييره ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top