.NET HttpListener: cuando se registra HTTP y HTTPS consigo “entra en conflicto con un registro existente en la máquina”

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de utilizar .NET HttpListener en un proyecto de C #. Cuando puedo registrar el prefijo "http: // *: 8080 /" no parece que el trabajo de las direcciones URL HTTPS (es decir, no recogerlos). Cuando intento el código siguiente para registrar las versiones de HTTP y HTTPS del prefijo sin embargo, me sale el error:

"No se ha podido escuchar en el prefijo 'https: // : 8080 /'. Porque entra en conflicto con un registro existente en la máquina" *

¿Cómo puedo hacer que mi trabajo prefijo para HTTP y 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 - aclaración adicional:

  • El programa está funcionando como un proxy local para aplicaciones de PC haciendo HTTP (S) dice en voz alta.
  • El uso se basa por lo tanto en el cambio de la configuración de proxy del explorador de uno a punto de esta casa locales cultivados servidor proxy (por ejemplo localhost: 8080)
  • Esto implica, por tanto, (supongo) que el HttpListener tiene que escuchar tanto para tráfico HTTP y HTTPS en este mismo puerto local (por ejemplo, 8080).
  • Objetivo. Trate de encontrar una manera para que mi programa para escuchar HTTP y HTTPS en el mismo puerto

gracias

¿Fue útil?

Solución

  

Objetivo: tratar de encontrar una manera de que mi   programa para escuchar HTTP y   HTTPS en el mismo puerto.

no pueden hacer esto con HttpListener. Tendrá que utilizar un TCPListener manejar cada respuesta condicional dependiendo de si se trata de HTTP o HTTPS.

estoy bastante seguro si se utiliza uno HttpListener 8080 para HTTP y HTTPS uno para 8443 que debería ser capaz de hacer uso de su navegador yourproxy: 8080 para HTTP y yourproxy: 8443 para HTTPS. Firefox definitivamente vamos a hacer esto.

Otros consejos

Por defecto, HTTPS a través del puerto 443 en lugar de 80. Se tiene que especificar un puerto diferente para diferentes Lister protocolo.

Esto suena trivial, pero no imposible. Usted tendrá que inspeccionar lo envía al cliente y decidir si están comenzando una sesión HTTP o HTTPS en base a los datos que suministran.

editar: Pensando en esto un poco más esto probablemente no es lo que quiere hacer dado que está escribiendo un proxy. En lugar de ello tendrá que manejar el método CONNECT (ver http://www.ietf.org/rfc /rfc2817.txt ) y abrir una conexión de túnel al servidor de destino.

"Si crea una HttpListener usando HTTPS, debe seleccionar un certificado de servidor para el que escucha. De lo contrario, un HttpWebRequest consulta de este HttpListener fallará con un cierre inesperado de la conexión." Este es el sitio de MSDN. ( http://msdn.microsoft.com/en-us/ biblioteca / system.net.httplistener.aspx ) Tal problema es que hay?

No se ven obligados a utilizar la misma configuración para todos los protocolos.

Hit avanzado en la configuración del proxy, y no se puede especificar diferentes configuraciones de proxy para otros protocolos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top