我正在编写一个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类中没有公共方法可以使用它。
答案 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);
}