FiddlerScript
環境搭建
官網下載:
https://www.telerik.com/fiddler
安裝步驟參照下面這篇文章(安裝證書抓取https皆有詳細步驟):
https://www.cnblogs.com/liulinghua90/p/9109282.html
簡單Fiddler Script
如下展示了Fiddler在客戶端與服務端進行交互時的位置,在客戶端發起http請求及接收服務端返回的數據時都可截取交互的數據。那么在Fiddler中我們就可以抓取所有http請求的數據,甚至可以更改參數再請求到服務端!!

Fiddler的普通抓包分析將不再贅述,這里主要介紹Fiddler高級用法也就是通過修改Fiddler Script腳本文件來實現請求數據及返回數據的修改。
Fiddler Script在Rules->Customize Rules:

腳本中的主要方法說明:
static function OnBoot fiddler 啟動時調用
static function OnShutdown fiddler關閉時調用
static function OnAttach fiddler注冊成系統代理時調用
static function OnDetach fiddler 取消注冊系統代理時調用
static function Main 在每次fiddler啟動時和編譯CustomRules.js 腳本時調用。
static function OnBeforeRequest(oSession: Session) 在這個方法中修改Request的內容
static function OnBeforeResponse(oSession: Session) 在這個方法中修改Response的內容(對應爬蟲來說該方法最常用)
show you mine code
如下一段代碼實現提取http請求返回的json數據保存至本地文件 並通過post請求發送至自己后台。
主要包含三大塊:
- 解析response數據構造自身需要的json;
- 數據寫入本地文件;
- 數據通過POST請求發送至后台保存mongodb
static function OnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
// if (oSession.fullUrl.Contains("baidu.com")){
if (1){
oSession.utilDecodeResponse();//消除保存的請求可能存在亂碼的情況
var jsonString = oSession.GetResponseBodyAsString();
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(jsonString);
if((responseJSON.JSONObject=='System.Collections.ArrayList' || responseJSON.JSONObject=='System.Collections.Hashtable')&&jsonString!='[]'&&jsonString!='{}'){
// 判斷是否是json數據 然后保存
var str='{}';//構造自己的JSON http請求的信息及返回的結果
var data = Fiddler.WebFormats.JSON.JsonDecode(str);
data.JSONObject["request_method"] = oSession.RequestMethod;
var requestString = oSession.GetRequestBodyAsString();
data.JSONObject["request_body"]= requestString;
data.JSONObject["response_data"] = responseJSON.JSONObject;
data.JSONObject["url"] = oSession.fullUrl;
data.JSONObject["response_code"] = oSession.responseCode;
jsonString = Fiddler.WebFormats.JSON.JsonEncode(data.JSONObject)
// 保存文件到本地
var fso;
var file;
fso = new ActiveXObject("Scripting.FileSystemObject");
file = fso.OpenTextFile("E:\\spider_img\\Sessions.dat",8 ,true, true);
file.writeLine(jsonString);
file.writeLine("\n");
file.close();
// 數據通過post請求發送自己的后台服務保存
FiddlerObject.log('2222222222222222'+jsonString);
// methods
var method = "POST";
var myUrl = 'http://localhost:8000/fiddler'
var url = myUrl+'?data='+Utilities.UrlEncode(jsonString);
var protocol = "HTTP/1.1";
var raw="";
var selected: Session = oSession;
raw += method + " " + url + " " + protocol + "\r\n";
raw +="Host:localhost:8000\r\n";
raw +="Connection: keep-alive\r\n";
raw +="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
raw +="User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36\r\n";
raw +="Accept-Encoding: gzip,deflate,sdch\r\n";
raw +="Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
raw +="Content-Type: application/json\r\n";
var body= "jsondata=''";
raw += "\r\n" + body;
FiddlerObject.utilIssueRequest(raw);
}
}
}
測試抓取某金融app銀行類產品的存款利率

寫入文件的json結果:

寫在最后:
環境問題:
1.pc網頁抓取暫無問題,參照上面的安裝鏈接配置沒有什么問題很容易成功。
2.app抓取問題:模擬器抓取會有很多app無法正常運行,可使用真機抓取。
3.https 403問題:手機安裝證書后瀏覽器https抓取正常,但是部分app無法獲取https鏈接,熱心網友解決方法是使用JustTrustMe關閉ssl認證即可解決。但是我的小米6沒有root成功無法安裝 后來直接拿出老手機米4 android 6.x的系統便可直接抓取(老系統對爬蟲比較友好),最后再root裝個按鍵精靈就可以愉快的玩耍了。
Fiddler Script腳本問題:
JScript之前並沒有了解過,寫完上面的代碼后也不怎么了解,反正代碼里面有其他的代碼 依葫蘆畫瓢嘛 而且感覺語法和JavaScript有很多相似的。
還有就是在類視圖里去找相應的方法,雖然里面的解釋不夠詳細 但是根據名稱簡單介紹就大概知道用途了(官網並未找到詳細的說明文檔,有了解的老兄可以留言交流)
