由于微软Webbrowser控件的限制,使用Webbrowser.Document.Cookie是不能获取到HttpOnly的cookie的。
解决办法:采用扩展的csExWB Webbrowser控件,csExWB Webbrowser控件支持对HTTP头的监控,这就给了我们读取HttpOnly Cookie数据的方法,
csExWB Webbrowser控件官方功能介绍:
通过这个特性,我们就可以获取到每一次请求的原始HTTP数据,然后想干什么干什么。
代码片段摘抄如下:
注册事件
this.cEXWB1.ProtocolHandlerOnResponse += new csExWB.ProtocolHandlerOnResponseEventHandler(this.cEXWB1_ProtocolHandlerOnResponse);
this.cEXWB1.ProtocolHandlerOnBeginTransaction += new csExWB.ProtocolHandlerOnBeginTransactionEventHandler(this.cEXWB1_ProtocolHandlerOnBeginTransaction);
this.cEXWB1.ProtocolHandlerOnBeginTransaction += new csExWB.ProtocolHandlerOnBeginTransactionEventHandler(this.cEXWB1_ProtocolHandlerOnBeginTransaction);
在事件里处理HTTP头
private void cEXWB1_ProtocolHandlerOnBeginTransaction(object sender, csExWB.ProtocolHandlerOnBeginTransactionEventArgs e)
{
}
private void cEXWB1_ProtocolHandlerOnResponse(object sender, csExWB.ProtocolHandlerOnResponseEventArgs e)
{
//记录分析cookie
string headers = e.m_ResponseHeaders;
//.......自定义代码,对http头数据进行处理可以获得HttpOnly的Cookie
}
{
}
private void cEXWB1_ProtocolHandlerOnResponse(object sender, csExWB.ProtocolHandlerOnResponseEventArgs e)
{
//记录分析cookie
string headers = e.m_ResponseHeaders;
//.......自定义代码,对http头数据进行处理可以获得HttpOnly的Cookie
}
调用StartHTTPAPP()和StartHTTPSAPP()开始监控,调用StopHTTPAPP()和StopHTTPSAPP()方法停止监控。
cEXWB1.StartHTTPAPP();
cEXWB1.StartHTTPSAPP();
cEXWB1.StopHTTPAPP();
cEXWB1.StopHTTPSAPP();
cEXWB1.StartHTTPSAPP();
cEXWB1.StopHTTPAPP();
cEXWB1.StopHTTPSAPP();
codeproject上的链接:http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
googlecode上的项目主页:http://code.google.com/p/csexwb2/
这个控件比微软自带的Webbrowser控件好用很多,唯一不足是需要额外注册ActiveX组件。