.Net httplistener: при регистрации как http & https я получаю "конфликты с существующей регистрацией на машине"
-
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 в настройках прокси, и там вы можете указать различные настройки прокси для других протоколов.