Windows 10 MessageWebsocket添加cookie

时间:2016-02-16 21:22:43

标签: c# websocket windows-10 win-universal-app windows-10-universal

我正在编写一个Windows 10应用程序,我试图将websocket连接到IRCCloud api。

IRCCloud api需要以下请求标头:

GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
User-Agent: [REDACTED]
Cookie: session=[REDACTED]
Sec-WebSocket-Key: [REDACTED]==
Host: api.irccloud.com
Origin: https://api.irccloud.com
Sec-WebSocket-Version: 13

我使用以下代码将websocket连接到api:

MessageWebSocket Socket = new MessageWebSocket();
Socket.SetRequestHeader("Origin", "https://api.irccloud.com");
Socket.SetRequestHeader("Cookie", "session=" + info.Session);    
Socket.MessageReceived += Socket_MessageReceived;
await Socket.ConnectAsync(new Uri("wss://" + Host + Path));

然而,当我连接时,由于Websocket自身添加了一个名为__cfduid的cookie,我得到了一个身份验证错误。 IRCClouds API非常具体,因为会话cookie应该是请求标头中唯一的cookie。使用Windows.Web.Http.HttpClient检索会话密钥。

我使用IRCCloud开发者验证了我的所有其他参数,他们说这些参数是正确的,并且他们也向我指出了cookie。所以我的问题是,如何删除cookie?在MessageWebSocket类中没有公共方法可以使用它。

1 个答案:

答案 0 :(得分:1)

WebSockets API使用与Windows.Web.Http命名空间相同的底层堆栈,因此,您需要使用以下内容手动删除cookie:

var filter = new HttpBaseProtocolFilter();
var cookieManager = filter.CookieManager;

var uri = new Uri("http://example.com/foo/bar");
foreach (var cookie in cookieManager.GetCookies(uri))
{
    cookieManager.DeleteCookie(cookie);
}