引用dll
FiddlerCore4.dll 下载地址
提取码:7g07
定义参数
1 2 3 4 5 6 7 8 9 10 11
| public static Proxy oSecureEndpoint;
string sSecureEndpointHostname = "localhost";
int iSecureEndpointPort = 8877;
int iStartPort = 9898;
List<Session> oAllSessions = new List<Session>(); string cookies;
|
初始化Fiddler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| private void InitFiddler() { FiddlerApplication.SetAppDisplayName("test"); FiddlerApplication.BeforeRequest += On_BeforeRequest; FiddlerApplication.AfterSessionComplete += On_AfterSessionComplete; FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse; X509Certificate2 oRootCert; if (null == CertMaker.GetRootCertificate()) { CertMaker.createRootCert();
oRootCert = CertMaker.GetRootCertificate();
X509Store certStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); certStore.Open(OpenFlags.ReadWrite); try { certStore.Add(oRootCert); } finally { certStore.Close(); } var serviceRuntimeUserCertificateStore = new X509Store(StoreName.My); serviceRuntimeUserCertificateStore.Open(OpenFlags.ReadWrite);
serviceRuntimeUserCertificateStore.Add(oRootCert); serviceRuntimeUserCertificateStore.Close(); } else { oRootCert = CertMaker.GetRootCertificate(); }
FiddlerApplication.oDefaultClientCertificate = oRootCert; CONFIG.IgnoreServerCertErrors = true; CertMaker.trustRootCert(); FiddlerApplication.Prefs.SetBoolPref("fiddler.network.streaming.abortifclientaborts", true); FiddlerApplication.Startup(iStartPort, FiddlerCoreStartupFlags.DecryptSSL | FiddlerCoreStartupFlags.AllowRemoteClients | FiddlerCoreStartupFlags.Default); oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, oRootCert); }
|
封包发送中事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| private void FiddlerApplication_BeforeResponse(Session oS) { HTTPRequestHeaders headers = oS.oRequest.headers; if (oS.fullUrl == "http://www.sufeinet.com/") { cookies = headers.AllValues("cookie"); } if (oS.fullUrl == "https://www.sditds.gov.cn/sdvplatformserver/swProxy/deskserver/sw/deskIndex?menu_id=spl") { cookies = headers.AllValues("cookie"); } #region 报关单 if (oS.fullUrl.Contains("https://www.sditds.gov.cn:443/sdvplatformserver/swProxy/decserver/sw/dec/cusCiqZhImport") || oS.fullUrl.Contains("https://www.sditds.gov.cn/sdvplatformserver/swProxy/decserver/sw/dec/cusCiqZhImport")) { bll_Home.AddDecHeadbtn(oS); } if (oS.fullUrl.Contains("static/js/dec/cusCiqZh/dec.js")) { bll_Home.AddDecHeadevent(oS, AESEncryptHelperAuto.AESDecrypt(ConfigHelper.GetValue("Account"))); } if (oS.fullUrl.Contains("https://www.sditds.gov.cn/sdvplatformserver/swProxy/invtwebserver/sw/ems/pub/common/EmsListQuery/Npts/")) { cookies = headers.AllValues("cookie"); oS.utilDecodeResponse(); string requestText = System.Text.Encoding.UTF8.GetString(oS.ResponseBody); string str2 = BGHelper.menuType2(cookies); string fun = string.Format(@"loadMenuTypeStr('{0}')", requestText.Replace("\"", "")); var data = JsHelper.ExecuteScript(fun, str2); oS.utilSetResponseBody(data); } #endregion #region 随附单据上传格式转换 if (oS.fullUrl.Contains("static/js/dec/cusCiqZh/docUpload.js")) { cookies = headers.AllValues("cookie"); oS.utilDecodeResponse(); string requestText = System.Text.Encoding.UTF8.GetString(oS.ResponseBody); requestText = requestText.Replace("choosePdfFile();", "keepFile(1);") + "function keepFile(type) {" + "\r\n var cusCiqNo = $(\"#cusCiqNo\").val();" + "\r\n var attTypeCode = $(\"#attTypeCode\").val();" + "\r\n var attTypeCodeName = $(\"#attTypeCodeName\").val();" + "\r\n if (!cusCiqNo) {" + "\r\n layerMsg('请先保存基本信息!', 2, 3000);" + "\r\n return false;" + "\r\n }" + "\r\n if (!attTypeCode) {" + "\r\n layerMsg('请选择随附单据文件类别!', 2, 3000);" + "\r\n return false;" + "\r\n }" + "\r\n var attEdocNo = $(\"#dec_doc_form input[id=attEdocNo]\").val();" + "\r\n var begin = attTypeCode.substring(0, 1); " + "\r\n var attFmtTypeCode = \"US\";" + "\r\n var docType = \"所有文件 | *.* \";" + "\r\n var docSize = \"4M\";" + "\r\n var attSeqNo = \"\";" + "\r\n $(\"#i_select_files\").prop(\"disabled\", true);" + "\r\n" + "\r\n var ws = new WebSocket(\"ws://127.0.0.1:12581\");" + "\r\n ws.onopen = function () {" + "\r\n ws.send(\"1\");" + "\r\n }" + "\r\n ws.onmessage = function (evt) { " + "\r\n if (evt.data.toString() == \"当前文件类型不可转换\") {" + "\r\n }" + "\r\n else if (evt.data.toString() == \"用户已取消\") {" + "\r\n }" + "\r\n else if (evt.data.toString() == \"图片压缩失败\") {" + "\r\n layer.alert(\"图片压缩失败\");" + "\r\n }" + "\r\n else if (evt.data.toString() == \"文件压缩后大于4M\") {" + "\r\n layer.alert(\"文件压缩后大于4M\");" + "\r\n }" + "\r\n else if (evt.data.toString() == \"文件单页超过400kb\") {" + "\r\n layer.alert(\"文件单页超过400kb\");" + "\r\n }" + "\r\n else if (evt.data.toString() == \"文件名称含有不规则符号请修改,例如 = 和 &。\") {" + "\r\n layer.alert(\"文件名称含有不规则符号请修改,例如 = 和 &。\");" + "\r\n } else if (evt.data.toString() == \"文件转换出错!请联系管理员\") {" + "\r\nlayer.alert(\"文件转换出错!请联系管理员\"); }" + "\r\n else { var attEdocPath = evt.data.toString(); attEdocPath = attEdocPath.replace(/(\\\\)/g, '/'); var entOrigFileName = attEdocPath.substr(attEdocPath.lastIndexOf(\"/\") + 1);" + "\r\n var docType = attEdocPath.substr(attEdocPath.lastIndexOf(\".\") + 1);" + "\r\n var addRow = {" + "\r\n \"attSeqNo\": attSeqNo," + "\r\n \"cusCiqNo\": cusCiqNo," + "\r\n \"attTypeCode\": attTypeCode," + "\r\n \"attTypeCodeName\": attTypeCodeName," + "\r\n \"attEdocNo\": attEdocNo," + "\r\n \"entOrigFileName\": entOrigFileName," + "\r\n \"attFmtTypeCode\": attFmtTypeCode," + "\r\n \"attEdocId\": \"\"," + "\r\n \"attEdocPath\": attEdocPath," + "\r\n \"attEdocStatus\": \"\"," + "\r\n \"docType\": docType" + "\r\n };" + "\r\n $(\"#decDocTable\").bootstrapTable(\"append\", [addRow]); decDocFormReset(); $('#attTypeCodeName').focus(); $(\"#i_select_files\").prop(\"disabled\", false);" + "\r\n }" + "\r\n ws.close();" + "\r\n };" + "\r\n ws.onerror = function (env) { if (env.target.readyState == 3) { choosePdfFile(type); } ws.close(); }" + "\r\n}" + ""; oS.utilSetResponseBody(requestText); } #endregion }
|
封包发送之前事件
1 2 3 4 5 6 7 8 9 10 11
| private void On_BeforeRequest(Session oS) { if ( oS.fullUrl.Contains("static/js/dec/cusCiqZh/docUpload.js") || oS.fullUrl.Contains("static/js/dec/cusCiqZh/dec.js") || oS.fullUrl.Contains("https://www.sditds.gov.cn:443/sdvplatformserver/swProxy/decserver/sw/dec/cusCiqZhImport") || oS.fullUrl.Contains("https://www.sditds.gov.cn/sdvplatformserver/swProxy/decserver/sw/dec/cusCiqZhImport") || oS.fullUrl.Contains("https://www.sditds.gov.cn/sdvplatformserver/swProxy/invtwebserver/sw/ems/pub/common/EmsListQuery/Npts/") ) oS.bBufferResponse = true; }
|
封包响应结束事件
1 2 3 4
| private void On_AfterSessionComplete(Session oS) {
}
|
几个关键的方法和变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
oSession.GetRequestBodyAsString()
oSession.GetResponseBodyAsString()
oSession["ui-color"] = "orange";
oSession.oRequest.headers.Remove("MQB-X5-Referer");
oSession.oRequest["Cache-Control"] = "no-cache";
oSession.host = "example.domain";
oSession.oRequest["Origin"] = "http://domain";
oSession.oRequest.headers.Remove("Cookie");
oSession.oRequest.headers.Add("Cookie", "username=cookiename;");
oSession.oRequest["Referer"] = "https://yoururl";
拦截websockets请求
FiddlerApplication_OnWebSocketMessage
|