.NET HttpListener: lors de l'enregistrement HTTP et HTTPS, je reçois « en conflit avec un enregistrement existant sur la machine »

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

  •  26-09-2019
  •  | 
  •  

Question

Je suis en train d'utiliser HttpListener .NET dans un projet C #. Quand j'enregistrer mon préfixe « http: // *: 8080 / » il ne semble pas fonctionner pour HTTPS urls (à savoir ne les ramassez pas). Lorsque je tente le code suivant pour enregistrer les deux HTTP et HTTPS versions du préfixe mais je reçois l'erreur:

"Failed écouter le préfixe 'https: // : 8080 /'. Parce qu'il est en conflit avec un enregistrement existant sur la machine" *

Comment puis-je obtenir pour HTTP et HTTPS mon travail préfixe?

    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 - Des précisions supplémentaires:

  • Le programme fonctionne comme un proxy local pour les applications PC faire des appels HTTP (S) sur.
  • L'utilisation est donc basée sur la modification d'un des paramètres de proxy du navigateur pour pointer vers cette maison locale développée serveur proxy (par exemple localhost: 8080)
  • Cela implique donc (je suppose) que le HttpListener doit écouter le trafic HTTP et HTTPS sur ce même port local (par exemple 8080).
  • OBJECTIF:. Essayez de trouver un moyen pour mon programme pour écouter HTTP et HTTPS sur le même port

Merci

Était-ce utile?

La solution

  

OBJECTIF: Essayez de trouver un moyen pour mon   programme pour écouter HTTP et   HTTPS sur le même port.

ne peut pas faire avec HttpListener. Vous aurez besoin d'utiliser un TcpListener traiter chaque réponse conditionnelle selon qu'elle est HTTP ou HTTPS.

Je suis assez sûr que si vous utilisez un HttpListener pour HTTP 8080 et un pour HTTPS 8443, vous devriez être en mesure de rendre votre utilisation du navigateur yourproxy: 8080 pour HTTP et yourproxy: 8443 pour HTTPS. Firefox laisse sans aucun doute de vous faire.

Autres conseils

Par défaut, https en utilisant le port 443 au lieu de 80. Vous devez spécifier le port différent du protocole différent listeuse.

Cela semble non trivial mais pas impossible. Vous aurez besoin d'inspecter ce que le client envoie et décider si elles commencent une session HTTP ou HTTPS à partir des données qu'ils fournissent.

edit: Penser à cela un peu plus ce qui est probablement pas ce que vous voulez faire, étant donné que vous écrivez un proxy. vous devrez gérer au lieu de la méthode CONNECT (voir http://www.ietf.org/rfc /rfc2817.txt ) et ouvrir une connexion tunnel au serveur cible.

« Si vous créez un HttpListener en utilisant https, vous devez sélectionner un certificat de serveur pour cet auditeur. Dans le cas contraire, une requête HttpWebRequest de cette HttpListener échouera avec une fin de la connexion inattendue. » Ceci est à partir du site msdn. ( http://msdn.microsoft.com/en-us/ bibliothèque / system.net.httplistener.aspx ) Peut-être est-il problème?

Vous n'êtes pas obligé d'utiliser la même configuration pour tous les protocoles.

Hit avancé dans les paramètres de proxy, et vous pouvez spécifier différents paramètres de proxy pour d'autres protocoles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top