如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?
Posted
技术标签:
【中文标题】如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?【英文标题】:How to use .NET WebSocket Client with NTLM proxies? 【发布时间】:2016-12-29 17:31:09 【问题描述】:我的目标是使用 WebSocket .Net 客户端实现(即不是浏览器)通过需要 NTLM 身份验证的公司代理连接到 WebSocket。到目前为止,所有解决方案(例如 websocket-sharp-with-proxy、websocket4net)都不足。
我试过这些:
How to use proxies with the WebSocket4Net library
https://***.com/a/2587330/573261
据我所知,作者尚未更新有关添加 NTLM 代理支持的讨论。 http://websocket4net.codeplex.com/discussions/448172
这个问题试图问为什么客户端实现不支持代理,但没有得到回答,也没有说明为什么没有人愿意解决这个问题。
回到我的问题,如何在 NTLM 代理后面的客户端应用程序中使用 WebSocket 技术?
【问题讨论】:
底层 .NET http 堆栈使用什么?大多数 Windows 堆栈(例如 WinInet、WinHTTP)已经支持 NTLM。 @Adrien 与new WebSocket("ws://echo.websocket.org", origin: "http://example.com");
相呼应的东西,但它没有将 NTLM 代理作为参数。我提到的库也试过了,不管他们在内部使用什么
您能否提及这是一个独立的服务流程,还是更像一个桌面应用程序,一个人将登录并从他们的凭据启动您的应用程序?
桌面应用程序(便携式,类似 xcopy)
【参考方案1】:
System.Net.WebSockets
中的 ClientWebSocket
对象包含一个 Options
属性,允许您配置代理设置。
var ws = new System.Net.WebSockets.ClientWebSocket();
await ws.ConnectAsync(new Uri("destination.com"), CancellationToken.None);
ws.Options.Proxy = new WebProxy("example.com")
Credentials = new NetworkCredential("userName", "password")
;
NetworkCredential
对象用于基于密码的身份验证,可以提供您需要的内容。如果上述方法不起作用,您也可以尝试在WebSocket
对象的Options
属性上设置Credentials
。
ws.Options.Credentials = new NetworkCredential("userName", "password");
我无法访问这种类型的环境,所以我实际上没有尝试过您正在尝试做的事情,并且不确定这是否会有所帮助。但是,这看起来对我有用。
【讨论】:
以上是关于如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
java 11 java.net.http.Websocket 与 undertow 或 vert.x、netty 相比效率如何