.NET HttPlistener: عند تسجيل كل من HTTP & HTTPS ، أحصل على "تعارض مع تسجيل موجود على الجهاز"

StackOverflow https://stackoverflow.com/questions/2619251

  •  26-09-2019
  •  | 
  •  

سؤال

أحاول استخدام .NET HttPlistener في مشروع C#. عندما أقوم بتسجيل البادئة الخاصة بي "http: //*: 8080/" لا يبدو أنه يعمل مع عناوين URL HTTPS (أي لا تلتقطها). عندما أجرب الكود التالي لتسجيل إصدارات HTTP و HTTPS من البادئة ، إلا أنني أحصل على الخطأ:

"فشل في الاستماع إلى البادئة" https: //: 8080/'لأنه يتعارض مع تسجيل موجود على الجهاز. "*

كيف يمكنني تشغيل البادئة الخاصة بي لكل من HTTP & HTTPS؟

    private HttpListener _listener;

    // Create prefixes
    var prefixes = new List<string>();
    prefixes.Add("http://*:8080/");
    prefixes.Add("https://*:8080/");


    // Create HttpListener
    _listener = new HttpListener();
    foreach (string prefix in prefixes)
    {
        _listener.Prefixes.Add(prefix);
    }

    _listener.Start();   // <== ERROR HERE

تحرير 1 - توضيح إضافي:

  • يعمل البرنامج كبديل محلي لتطبيقات الكمبيوتر الذي يقوم بإجراء مكالمات HTTP (S).
  • لذلك يعتمد الاستخدام على تغيير إعدادات وكيل المتصفح الخاصة ، للإشارة إلى خادم الوكيل المحلي المزروع (على سبيل المثال LocalHost: 8080)
  • هذا يعني (أفترض) (أفترض) أنه يتعين على httplistener الاستماع لكل من حركة مرور HTTP و HTTPS على هذا المنفذ المحلي نفسه (على سبيل المثال 8080).
  • الهدف: حاول إيجاد طريقة لبرنامجي للاستماع إلى كل من HTTP و HTTPS على نفس المنفذ.

شكرًا

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

المحلول

الهدف: حاول إيجاد طريقة لبرنامجي للاستماع إلى كل من HTTP و HTTPS على نفس المنفذ.

أنت لا يمكن افعل هذا مع httplistener. ستحتاج إلى استخدام أ tcplistener والتعامل مع كل استجابة مشروطة اعتمادا على ما إذا كان HTTP أو HTTPS.

أنا متأكد تمامًا مما إذا كنت تستخدم httplistener واحد لـ HTTP 8080 وواحد لـ HTTPS 8443 ، فيجب أن تكون قادرًا على جعل متصفحك يستخدم YouRproxy: 8080 لـ HTTP و YourProxy: 8443 لـ HTTPs. Firefox بالتأكيد دعنا تفعل هذا.

نصائح أخرى

بشكل افتراضي ، HTTPS باستخدام المنفذ 443 بدلاً من 80. يجب عليك تحديد منفذ مختلف إلى Lister بروتوكول مختلف.

هذا يبدو غير تافهة ولكن ليس مستحيلًا. ستحتاج إلى فحص ما يرسله العميل ويقرر ما إذا كان يبدأ جلسة HTTP أو HTTPS بناءً على البيانات التي يوفرونها.

تحرير: التفكير في هذا أكثر قليلاً ، ربما ليس ما تريد القيام به بالنظر إلى أنك تكتب وكيلًا. بدلاً من ذلك ستحتاج إلى التعامل مع طريقة الاتصال (انظر http://www.ietf.org/rfc/rfc2817.txt) وفتح اتصال نفق بخادم الهدف.

"إذا قمت بإنشاء httplistener باستخدام HTTPS ، فيجب عليك تحديد شهادة خادم لهذا المستمع. وإلا ، فإن استعلام httpwebrequest من هذا httplistener سيفشل مع إغلاق غير متوقع للاتصال." هذا من موقع MSDN. ((http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) ربما هناك مشكلة؟

أنت لست مضطرًا لاستخدام نفس التكوين لجميع البروتوكولات.

اضغط على المتقدم في إعدادات الوكيل ، ويمكنك تحديد إعدادات الوكيل المختلفة للبروتوكولات الأخرى.

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