Tag: httplistener

HttpListener与JWT和Basic auth:如何发送WWW-Authenticate? (自托管)

我有一个在mono / .NET上运行跨平台的自托管REST应用程序。 一个问题是HttpListener管理和阻止WWW-Authenticate头的手动设置。 如果您将自己限制为内置的Basic,NTLM等身份validation,或者不需要身份validation,那么这很好,但如果您想接受任何其他类型的令牌,则会出现问题。 我正在使用带有REST样式接口的JWT令牌,使用Basic [1] auth进行初始身份validation。 在应用程序的另一部分,我正在做类似的事情,但使用自定义令牌和/或Basic auth作为API的另一部分的后备。 问题是: 如何让HttpListener发送“WWW-Authenticate:Basic”质询标题,同时还允许非基本授权令牌通过? 我已经尝试在听众中设置Basic和Anonymous: _listener.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Anonymous; 这导致在任何情况下都不返回WWW-Authenticate头。 我相信这应该允许基本或未经身份validation的连接,并且当我将状态代码设置为401(HttpStatusCode.Unauthorized)时,还应该设置WWW-Authenticate挑战。 但它没有(在mono或.NET上)。 如果我只设置AuthenticationSchemes.Basic,HttpListener会拒绝所有没有Basic样式标记的连接,这对于远程用途并不重要。 明显但蹩脚的解决方法: 目前我只是违反HTTP规范并返回401而没有WWW-Authenticate标头。 这有效,但会降低与第三方工具的兼容性。 我考虑使用完全不同的HttpListener实现,尽管大多数似乎是在原型阶段或自己的大型库的一部分。 我考虑过编写自己的HttpListener,但是在那时将整个应用程序移植到Java开始看起来很有吸引力。 我想找到比完整的平台端口或编写我自己的库更少工作的建议。 想法? [1] – 此处需要基本身份validation,以便与低级脚本和其他一些系统向后兼容。 请假设我了解安全隐患并使用SSL等。

如何将原始HTTP响应解析为HttpListenerResponse?

如果我将原始HTTP响应作为字符串: HTTP / 1.1 200好的 日期:2010年5月11日星期二07:28:30 GMT 过期:-1 Cache-Control:private,max-age = 0 Content-Type:text / html; 字符集= UTF-8 服务器:gws X-XSS-Protection:1; 模式=块 连接:关闭 … 有没有一种简单的方法可以将它解析为HttpListenerResponse对象? 或者至少是某种.NET对象,所以我不必使用原始响应。 我目前正在做的是提取标题键/值对并在HttpListenerResponse上设置它们。 但是有些头文件无法设置,然后我必须剪切响应的主体并将其写入OutputStream。 但身体可以被gzipped,或者它可能是一个图像,我还无法工作。 并且一些响应在任何地方都包含随机字符,这看起来像编码问题。 这很麻烦。 我正在获得原始响应,因为我正在使用SOCKS发送HTTP请求。 我正在处理的程序基本上是一个HTTP代理,它可以通过SOCKS代理路由请求,就像Privoxy那样。

通过POST解析

我使用Stream阅读器来读取context.Request.InputStream到最后并以字符串forms结束 “Gamestart=true&GamePlayer=8&CurrentDay=Monday&…” 在C#控制台中解析它的最有效/“干净”的方法是什么?

C#HttpListener和Windows防火墙

我正在开发的程序之一有一个内置的web服务器,只能处理非常具体的请求(静态)。 与TcpListener不同,当启动HttpListener时,不会提示用户允许程序允许侦听哪些网络。 这导致了一个大问题,因为程序需要侦听远程连接,现在Windows防火墙已拒绝远程连接。 如果我在Windows防火墙中创建一个新规则,并在“程序和服务”下选择我的程序,Windows仍将拒绝所有远程连接……但如果我选择“所有符合指定条件的程序”,那么它只能工作精细。 我的问题是为什么? 为什么防火墙会在专门选择时拒绝我的应用程序? 为什么用户不会像使用其他监听器一样获得防火墙安全屏幕的提示?

生产就绪,multithreading的c#http服务器

我在c#.NET中实现了一个HTTP服务器: public class HttpServer { private HttpListener listener; public HttpServer() { listener = new HttpListener(); listener.Prefixes.Add(“http://localhost:8080/”); } public void Start() { lock(this) { listener.Start(); AsyncProcessing(listener); } } public void Stop() { lock (this) { listener.Stop(); } } private void AsyncProcessing(HttpListener listener) { if (listener == null) return; listener.BeginGetContext(new AsyncCallback(Callback), listener); } private void Callback(IAsyncResult result) […]

干净地中断HttpListener的BeginGetContext方法

我正在使用HttpListener并使用BeginGetContext来获取我的上下文对象。 我想干净地关闭我的HttpListener但是如果我尝试在侦听器上执行Close操作,我会得到一个exception,它会导致我的程序退出。 using System; using System.Net; namespace Sandbox_Console { class Program { public static void Main() { if (!HttpListener.IsSupported) { Console.WriteLine(“Windows XP SP2 or Server 2003 is required to use the HttpListener class.”); return; } // Create a listener. HttpListener listener = new HttpListener(); listener.Prefixes.Add(“http://vwdev.vw.local:8081/BitsTest/”); listener.Start(); Console.WriteLine(“Listening…”); listener.BeginGetContext(Context, listener); Console.ReadLine(); listener.Close(); //Exception on this line, […]

什么原因导致HttpListener HTTP 503错误?

因此,我们有一个大型程序,它使用HttpListener进行小型远程管理function。 由于我不明白的原因,有些人遇到503错误的问题。 由于我们没有提供错误,因此框架中发生了一些事情。 现在,我的问题是,框架内部提供了什么错误? 是不是正确设置了前缀或什么? 我们目前的前缀设置为“http:// *:8080 /”。 建议吗?

使用HttpListener检测客户端断开连接

我有一个使用HttpListener的应用程序,我需要知道客户端什么时候断开连接,现在我把所有代码放在一个try / catch块中,这是非常难看的,不是一个好习惯。 我怎么知道客户端是否断开连接? 谢谢!

停止并重新启动HttpListener?

我正在开发一个具有HttpListener的应用程序。 我的目标是让用户在他们选择时关闭和打开监听器。 我把Listener放在一个新线程中,我遇到了一个问题,就是在中止该线程。 我在某处读到,如果您尝试中止处于非托管上下文中的线程,则只要它重新进入托管上下文,就会触发ThreadAbortException 。 似乎HttpListener的GetContext()方法是不受管理的,因为当我尝试中止线程时,在我针对我的应用程序发出Web请求之前没有任何事情发生。 然后线程退出。 问题是当我试图杀死线程时,我可能稍后在同一个端口上再次启动线程,并且HttpListenerException声明前缀已经注册。 我怎么能杀死一个交叉线程HttpListener? 是否有一个托管替代GetContext() ,允许线程中止? 我可以以非托管代码停止的方式中止线程吗?

如何使用System.Net.HttpListener在WebSocket中启用SSL

我在Windows Azure(工作者角色)上使用.Net 4.5和HttpListener类来创建自己的WebSocket服务器。 对于HTTP非安全连接,它可以很好地工作。 问题是我需要使用SSL(wss://)保护WebSocket连接。 我一直在寻找,HttpListener类文档和互联网(即使在这里)都没有帮助我。 我发现httpcfg.exe应该帮我配置证书,但没有幸运。 那么,这是我的问题: 有没有办法从我的代码中启用它? 喜欢从商店读取证书并以某种方式在HttpListener上设置它? 如果没有,httpcfg.exe是解决方案? 如果是的话,如何使用它? 如果1 ==否和2 ==是,我如何在Azure中使用httpcfg? 谢谢! 我非常感谢帮助…… 最好的祝福… Gutemberg