.NET HttpListener: при регистрации обеих HTTP & HTTPS я получаю “конфликты с существующей регистрацией на машине”

Я пытаюсь использовать.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 на том же порте.

спасибо

6
задан Greg 12 April 2010 в 00:48
поделиться

4 ответа

ЦЕЛЬ: Попытайтесь найти способ, чтобы моя программа прослушивала как HTTP, так и HTTPS на одном и том же порте.

Вы не можете сделать это с помощью HTTPListener. Вам нужно будет использовать TCPListener и обрабатывать каждый ответ условно в зависимости от того, HTTP это или HTTPS.

Я почти уверен, что если вы используете один HTTPListener для HTTP 8080 и один для HTTPS 8443, вы сможете заставить свой браузер использовать yourproxy: 8080 для HTTP и yourproxy: 8443 для HTTPS. Firefox определенно позволяет вам это сделать.

8
ответ дан 8 December 2019 в 16:00
поделиться

По умолчанию https использует порт 443, а не 80. Вы должны указать другой порт для другого списка протоколов.

3
ответ дан 8 December 2019 в 16:00
поделиться

Это звучит нетривиально, но не невозможно. Вам нужно будет проверить, что посылает клиент, и решить, начинает ли он сеанс HTTP или HTTPS, основываясь на данных, которые он предоставляет.

edit: Подумав об этом немного больше, вы, вероятно, не хотите этого делать, учитывая, что вы пишете прокси. Вместо этого вам нужно будет обработать метод CONNECT (см. http://www.ietf.org/rfc/rfc2817.txt) и открыть туннельное соединение с целевым сервером.

2
ответ дан 8 December 2019 в 16:00
поделиться

Вы не обязаны использовать одну и ту же конфигурацию для всех протоколов.

Нажмите «Дополнительно» в настройках прокси, и там вы можете указать другие настройки прокси для других протоколов.

0
ответ дан 8 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: