سؤال

لقد كنت ألعب مع مكتبة صافي Poco لبعض الوقت، فهي لطيفة جدا. مريحة للغاية وسهلة الفهم.

كنت قادرا على تحديد عنوان وكيل، وهو يقول 407 إذن وكيل مطلوب، بشكل صحيح. تصورت ذلك

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);

حاولت القيم مثل "Basic" و "Plaintext" في المخطط، و "المستخدم: كلمة المرور" في Authinfo. لا يبدو أن العمل. جوجل لا تساعد.

هل قام أي شخص باستخدام شبكة بوكو من قبل؟ أو هو الاستخدام الواضح وأنا غير قادر على الحصول عليها للعمل بسبب جهلي تجاه مصادقة الوكيل بشكل عام؟ من فضلك النصيحة.

تعديل: بعد أكثر من اللعب، أعتقد أن وظيفة SetCredentials تستخدم عندما يتوقع الخادم البعيد معلومات المصادقة تسجيل الدخول. لم أتمكن من إيجاد طريقة للقيام بمصادقة الوكيل باستخدام مكتبات Poco Net. كنت قادرا على ضبط الخادم الوكيل والمنفذ على الرغم من. هذا هو ما أود أن كان هناك مجرد خادم وكيل دون مصادقة:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("host", port);
session.sendRequest(req);

تحتاج مساعدة.

تعديل: بناء على الحل الذي اقترحته StackedCrooked، حاولت تحديد تفاصيل مصادقة الوكيل على رأس الطلب قبل تقديم الطلب، وفي نهج آخر موجود على الإنترنت، قمت بتعيين تفاصيل Auth الوكيل فقط بعد إجراء طلب أولي خطأ 407، ثم اتخاذ الطلب مرة أخرى. كلا الطريقتين تبقى على إعطاء نفس الخطأ 407. بلدي الرمز الحالي يبدو وكأنه هذا:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("10.7.128.1", 8080);
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM=");
session.sendRequest(req);
هل كانت مفيدة؟

المحلول

ربما تحتاج إلى إضافة حقل تفويض الوكيل إلى رؤوس HTTP. لا تحتوي فئة HTTPRequest في Poco على طريقة مخصصة لهذا. ومع ذلك، نظرا لأنه يرث من فئة NameValuecollection علنية، يمكنك تعيينه مثل هذا:

req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");

أين QWxhZGRpbjpvcGVuIHNlc2FtZQ== هي النسخة المشفرة Base64 من "علاء الدين: فتح السمسم".

أصبح الكثير من هذه المشكلات أسهل بمجرد تعلمك قليلا حول بروتوكول HTTP. أنا الآن الوعظ في الغالب بنفسي :)

نصائح أخرى

أنا لم أستخدم هذا بنفسي، لكن هل نظرت إلى httpbasiccredentials. صف دراسي؟ يربط الدعوة إلى Req.SetCredentials عبر طريقة المصادقة الخاصة بها. سوف ينتهي بك الأمر إلى شيء على غرار:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top