.NET Httplistener: bei der Anmeldung sowohl HTTP & HTTPS I „Konflikte mit einer bestehenden Registrierung auf der Maschine“ erhalten

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

  •  26-09-2019
  •  | 
  •  

Frage

Ich versuche .NET Httplistener in einem C # -Projekt zu verwenden. Wenn ich meinen Präfix registrieren „http: // *: 8080 /“, um es Arbeit scheint nicht für HTTPS-URLs (das heißt nicht, sie nicht abholen). Wenn ich den folgenden Code versuchen sowohl die HTTP zu registrieren und HTTPS-Versionen des Präfix aber ich den Fehler:

"Fehler auf Präfix hören 'https: // : 8080 /'., Weil sie mit einer bestehenden Registrierung auf der Maschine in Konflikt" *

Wie kann ich mein Präfix Arbeits für beide bekommen 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

EDIT 1 - Zusätzliche Klarstellung:

  • Das Programm arbeitet als lokaler Proxy für PC-Anwendungen HTTP machen (S) ruft.
  • Verwendung basiert daher auf Browser-Proxy-Einstellungen des einen Punkt auf diesen lokalen Home Ändern Proxy-Server gewachsen (zum Beispiel localhost: 8080)
  • Das bedeutet also (ich nehme an), dass die Httplistener für HTTP- und HTTPS-Datenverkehr zu überwachen haben auf dem gleich lokal Port (zum Beispiel 8080).
  • ZIEL:. Versuchen Sie, einen Weg für mein Programm zu finden, um sowohl HTTP und HTTPS auf dem gleichen Port zu hören

Dank

War es hilfreich?

Lösung

  

Ziel: Versuchen Sie, einen Weg zu finden für meine   Programm sowohl HTTP zu hören und   HTTPS auf dem gleichen Port.

Sie kann nicht tun dies mit Httplistener. Sie werden verwenden, benötigen ein TcpListener und Griff jede Antwort bedingt je nachdem, ob es HTTP oder HTTPS ist.

Ich bin mir ziemlich sicher, wenn Sie einen Httplistener verwenden für HTTP 8080 und ein für HTTPS 8443 Sie sollten in der Lage sein, zu Ihrem Browser verwendet yourproxy zu machen: 8080 für HTTP und yourproxy: 8443 für HTTPS. Firefox auf jeden Fall lassen Sie uns Sie dies tun.

Andere Tipps

In der Standardeinstellung https mit dem Port 443 statt 80. Sie müssen andere Port anderes Protokoll lister angeben.

Das klingt nicht-trivial, aber nicht unmöglich. Sie müssen prüfen, was der Kunde sendet und entscheiden, ob sie eine HTTP- oder HTTPS-Sitzung basieren ab dem Daten, die sie liefern.

edit: Nachdenken über diese ein wenig mehr ist dies wahrscheinlich nicht das, was Sie gegeben wollen, dass Sie einen Proxy zu schreiben. Stattdessen müssen Sie die CONNECT-Methode (siehe http://www.ietf.org/rfc zu handhaben /rfc2817.txt ) und eine getunnelte Verbindung zum Zielserver öffnen.

„Wenn Sie ein erstellen Httplistener mit https, müssen Sie für diesen Hörer ein Server-Zertifikat auswählen. Andernfalls eine HttpWebRequest Abfrage dieser Httplistener wird mit einem unerwarteten Ende der Verbindung fehl.“ Dies ist von Msdn Ort. ( http://msdn.microsoft.com/en-us/ Bibliothek / system.net.httplistener.aspx ) Vielleicht Problem ist da?

Sie sind nicht gezwungen, die gleiche Konfiguration für alle Protokolle zu verwenden.

fortgeschrittener Hit in den Proxy-Einstellungen, und dort können Sie verschiedene Proxy-Einstellungen für andere Protokolle angeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top