Ascoltatore Http .NET:quando registro sia HTTP che HTTPS ricevo "conflitti con una registrazione esistente sulla macchina"

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

  •  26-09-2019
  •  | 
  •  

Domanda

Sto cercando di utilizzare .NET HttpListener in un progetto C#.Quando registro il mio prefisso "http://*:8080/" sembra non funzionare per gli URL HTTPS (ad es.non li raccoglie).Quando provo il seguente codice per registrare entrambe le versioni HTTP e HTTPS del prefisso, tuttavia, ottengo l'errore:

"Impossibile ascoltare il prefisso 'https://:8080/' perché è in conflitto con una registrazione esistente sulla macchina."*

Come posso far funzionare il mio prefisso sia per HTTP che per 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 - Ulteriore chiarimento:

  • Il programma funziona come proxy locale per le applicazioni PC che effettuano chiamate HTTP(S).
  • L'utilizzo si basa quindi sulla modifica delle impostazioni proxy del browser in modo che punti a questo server proxy locale (ad es.host locale:8080)
  • Ciò implica quindi (presumo) che HttpListener debba ascoltare sia il traffico HTTP che HTTPS su questa stessa porta locale (ad es.8080).
  • OBBIETTIVO:Prova a trovare un modo in cui il mio programma possa ascoltare sia HTTP che HTTPS sulla stessa porta.

Grazie

È stato utile?

Soluzione

OBBIETTIVO:Prova a trovare un modo per il mio programma di ascoltare sia HTTP che HTTPS sulla stessa porta.

Voi non posso fallo con HTTPListener.Dovrai utilizzare a TCPListener e gestire ogni risposta in modo condizionale a seconda che sia HTTP o HTTPS.

Sono abbastanza sicuro che se usi un HTTPListener per HTTP 8080 e uno per HTTPS 8443 dovresti essere in grado di fare in modo che il tuo browser utilizzi yourproxy:8080 per HTTP e yourproxy:8443 per HTTPS.Firefox sicuramente ti consente di farlo.

Altri suggerimenti

Per impostazione predefinita, https utilizza la porta 443 anziché 80.È necessario specificare una porta diversa per un elenco di protocolli diverso.

Sembra non banale ma non impossibile.Dovrai controllare ciò che invia il client e decidere se sta avviando una sessione HTTP o HTTPS in base ai dati forniti.

modificare:Pensandoci un po' di più, probabilmente non è quello che vuoi fare dato che stai scrivendo un proxy.Dovrai invece gestire il metodo CONNECT (vedi http://www.ietf.org/rfc/rfc2817.txt) e aprire una connessione tunnel al server di destinazione.

"Se crei un HttpListener utilizzando https, devi selezionare un certificato server per quel listener.Altrimenti, una query HTTPWebRequest di questo httplistener fallirà con una chiusura inaspettata della connessione. "Questo proviene dal sito MSDN.(http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) Forse c'è un problema?

Non sei obbligato a utilizzare la stessa configurazione per tutti i protocolli.

Premi Avanzate nelle impostazioni del proxy e lì puoi specificare diverse impostazioni proxy per altri protocolli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top