关于c# winform使用FidderCore.dll 遇到的一些问题,请求支援
小弟最近再研究winform用fidder抓取包的过程。开始都很顺利,并且成功开启了代理网络。同时手机也设置代理,并且手机可以上网,而且电脑也能抓到手机的请求。
但是遇到两个问题。
1.,这里的关闭代理按钮,我已经设置了shutdown,但是实际上等我关闭这个代理,或者当我直接关闭窗口的时候,浏览器还是无法上网。这个时候重新打开软件开启代理就可以了。这个问题百度无果。
2.第二个问题有点特殊。就是我在抓一个app的请求数据。某个app我进入页面,如果直接通过Fidder工具。是可以抓到cookie,以及post数据的。如图中画圈的cs_session
但是当我透过winform的FidderCore.dll确无法获取这个cookie数据。我分别在三个地方设置了断点:BeforeRequest,BeforeResponse,AfterSessionComplete
百度有人oS.RequestHeaders["Cookie"];,但是调试过程中发现为空,而且分析了oSession的数据也没发现哪里有cookie,如下图
折腾一个下午了。成果就是程序可以跑起来代理,并且能抓到手机的请求数据,但是这两个问题实在是无能为了。还请打大家指教,不甚感激!!!!!
最终附上个人初步代码,还请大家指导。
1 public partial class Form1 : Form 2 { 3 static Proxy oSecureEndpoint; 4 static string sSecureEndpointHostname = "localhost"; 5 static int iSecureEndpointPort = 8866; 6 7 public Form1() 8 { 9 InitializeComponent(); 10 } 11 12 private void btn_Click(object sender, EventArgs e) 13 { 14 string strCollected = string.Empty; 15 16 MessageBox.Show(strCollected.ToString()); 17 } 18 19 private void button1_Click(object sender, EventArgs e) 20 { 21 if (!FiddlerApplication.IsStarted()) 22 { 23 //设置别名 24 Fiddler.FiddlerApplication.SetAppDisplayName("FiddlerCoreDemoApp"); 25 26 //启动方式 27 FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default; 28 29 //定义http代理端口 30 int iPort = 8866; 31 FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest; 32 FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse; 33 FiddlerApplication.AfterSessionComplete += AfterSessionComplete; 34 //启动代理程序,开始监听http请求 35 //端口,是否使用windows系统代理(如果为true,系统所有的http访问都会使用该代理)我使用的是 36 Fiddler.FiddlerApplication.Startup(iPort, false, false, true); 37 38 // 我们还将创建一个HTTPS监听器,当FiddlerCore被伪装成HTTPS服务器有用 39 // 而不是作为一个正常的CERN样式代理服务器。 40 oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname); 41 42 this.textBox1.Text += DateTime.Now.ToString("HH:MM:ss") + " 开启代理\r\n"; 43 } 44 else 45 { 46 MessageBox.Show("不能重复开启,正在抓取数据。"); 47 } 48 } 49 50 private void AfterSessionComplete(Session oSession) 51 { 52 if (oSession.fullUrl.Contains("creditcard")) 53 { 54 Console.WriteLine(oSession.url); 55 } 56 } 57 58 private void FiddlerApplication_BeforeResponse(Session oSession) 59 { 60 if (oSession.fullUrl.Contains("creditcard")) 61 { 62 Console.WriteLine(oSession.url); 63 } 64 } 65 66 private void FiddlerApplication_BeforeRequest(Session oSession) 67 { 68 if (oSession.fullUrl.Contains("creditcard") && !string.IsNullOrEmpty(oSession.oRequest["Cookie"])) 69 { 70 Console.WriteLine(oSession.url); 71 } 72 } 73 74 private void button2_Click(object sender, EventArgs e) 75 { 76 this.textBox1.Text += DateTime.Now.ToString("HH:MM:ss") + " 关闭代理\r\n"; 77 FiddlerApplication.Shutdown(); 78 } 79 }