我正在尝试在C#项目中使用.NET HttpListener。当我注册我的前缀“http:// *:8080 /”时,它似乎不适用于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 - 补充说明:
感谢
答案 0 :(得分:8)
目标:尝试为我找到一种方法 程序来监听HTTP和 同一端口上的HTTPS。
您无法使用HTTPListener执行此操作。您需要使用TCPListener并有条件地处理每个响应,具体取决于它是HTTP还是HTTPS。
我很确定如果你使用一个HTTPListener用于HTTP 8080,一个用于HTTPS 8443,你应该能够让你的浏览器使用你的app:8080用于HTTP和yourproxy:8443用于HTTPS。 Firefox绝对允许你这样做。
答案 1 :(得分:3)
默认情况下,https使用端口443而不是80.您必须为不同的协议列表器指定不同的端口。
答案 2 :(得分:2)
这听起来非常重要但并非不可能。您需要检查客户端发送的内容,并根据它们提供的数据确定它们是否正在启动HTTP或HTTPS会话。
编辑:考虑到你正在编写代理,这可能不是你想要做的事情。相反,您需要处理CONNECT方法(请参阅http://www.ietf.org/rfc/rfc2817.txt)并打开与目标服务器的隧道连接。
答案 3 :(得分:2)
“如果使用https创建HttpListener,则必须为该侦听器选择服务器证书。否则,此HttpListener的HttpWebRequest查询将因意外关闭连接而失败。” 这是来自msdn网站。 (http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) 也许有问题吗?
答案 4 :(得分:0)
您不必为所有协议使用相同的配置。
在代理设置中点击高级,然后您可以为其他协议指定不同的代理设置。