前言: 通過Fiddler抓取瀏覽器請求數據,相信大家已經都會用了,我們知道Fiddler是通過在本機計算器添加一個預設的代理伺服器來實現的抓包數據的,埠號為:8888。 其實當我們打開Fiddler的設置也可以看到: 然後查看本地計算器的網路代理設置: 基於上面的原理,Fiddler就實現了經過 ...
前言: 通過Fiddler抓取瀏覽器請求數據,相信大家已經都會用了,我們知道Fiddler是通過在本機計算器添加一個預設的代理伺服器來實現的抓包數據的,埠號為:8888。
其實當我們打開Fiddler的設置也可以看到:
然後查看本地計算器的網路代理設置:
基於上面的原理,Fiddler就實現了經過本機計算器請求的數據抓包了。。。
那麼,我們通過C#代碼,在.net Core中使用HttpClient發送的請求,是不是也能被Fiddler抓包呢???
實際上預設情況是抓不到的,但是微軟給我們預留了一個可以配置請求代理伺服器的口子,我們可以通過這個口子,來設置程式的代理伺服器,
將代理伺服器設置為本機:127.0.0.1,埠號設置為:8888,這樣就可以被Fiddler抓包了。 通過程式內抓包呢,我們能監控到我們發送的數據包,請求頭,Cookie,票據等等到底是什麼樣的,就能分析出一些問題所在。
下麵就貼出本人在.net Core3.0的框架下,測試使用程式內抓包的代碼:
1-自定義代理類:
/// <summary> /// 我的代理類 /// </summary> public class MyProxy : IWebProxy { //代理的地址 public MyProxy(Uri proxyUri) { //設置代理請求的票據 credentials = new NetworkCredential("用戶名", "密碼"); ProxyUri = proxyUri; } private NetworkCredential credentials; private Uri ProxyUri; public ICredentials Credentials { get => credentials; set => throw new NotImplementedException(); } //獲取代理地址 public Uri GetProxy(Uri destination) { return ProxyUri; // your proxy Uri } //主機host是否繞過代理伺服器,設置false即可 public bool IsBypassed(Uri host) { return false; }
} }
2-使用代理髮送請求:
MyProxy myProxy = new MyProxy(new Uri("http://127.0.0.1:8888")); var httpClientHandler = new HttpClientHandler() { Proxy = myProxy }; var httpClient = new HttpClient(httpClientHandler); HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "https://www.baidu1.com"); httpClient.SendAsync(httpRequestMessage);
最後查看Fiddler的監控請求,可以看到我們已經抓到了請求功能變數名稱為:www.baidu1.com的程式內的請求了(模擬程式內代理請求成功):