.Net httplistener: при регистрации как http & https я получаю "конфликты с существующей регистрацией на машине"

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

  •  26-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать .net httplistener в проекте C #. Когда я зарегистрирую свой префикс «http: // *: 8080 /», не работает для URL HTTPS (т.е. не забирает их). Когда я попробую следующий код, чтобы зарегистрировать как версии HTTP и HTTPS префикса, однако я получаю ошибку:

«Не удалось прослушать HTTPS Prefix ': //: 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 (ы).
  • Поэтому использование основано на изменении параметров прокси-сервера браузера, чтобы указать на этот локальный домохозяйственный прокси-сервер (например, localhost: 8080)
  • Следовательно, это подразумевает (предположим, что HTTPlistener должен слушать как трафик HTTP, так и HTTPS в этом же локальном порте (например, 8080).
  • Цель: попытаться найти способ моей программы, чтобы прослушать как http, так и https на одном порту.

Спасибо

Это было полезно?

Решение

Цель: Попробуйте найти способ для моей программы, чтобы прослушать как http, так и https на одном порте.

Ты неверно Сделайте это с httplistener. Вам нужно будет использовать Tcplistener. И обрабатывать каждый ответ условно в зависимости от того, есть ли он HTTP или HTTPS.

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

Другие советы

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

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

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

«Если вы создаете HTTPListener, используя HTTPS, вы должны выбрать сертификат сервера для этого слушателя. В противном случае запрос httpwebrequest этого httplistener не пройдет неудачника с неожиданным близким соединением." Это с сайта MSDN. (http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx.) Может быть, проблема там?

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top