Esempio n. 1
0
        private FiddlerRequsetChange GetRequestModificInfo()
        {
            FiddlerRequsetChange requsetChange = new FiddlerRequsetChange();

            requsetChange.HttpRawRequest = null;
            requsetChange.ActuatorStaticDataController = new FiddlerActuatorStaticDataCollectionController(StaticDataCollection);
            requsetChange.HttpFilter        = GetHttpFilter();
            requsetChange.ParameterPickList = GetParameterPick();
            requsetChange.UriModific        = new ContentModific(tb_requestModific_uriModificKey.Text, tb_requestModific_uriModificValue.Text);
            if (requestRemoveHeads.ListDataView.Items.Count > 0)
            {
                requsetChange.HeadDelList = new List <string>();
                foreach (ListViewItem tempRequestRemoveHead in requestRemoveHeads.ListDataView.Items)
                {
                    requsetChange.HeadDelList.Add(tempRequestRemoveHead.Text);
                }
            }
            if (requestAddHeads.ListDataView.Items.Count > 0)
            {
                requsetChange.HeadAddList = new List <string>();
                foreach (ListViewItem tempRequestAddHead in requestAddHeads.ListDataView.Items)
                {
                    requsetChange.HeadAddList.Add(tempRequestAddHead.Text);
                }
            }
            requsetChange.BodyModific = new ContentModific(tb_requestModific_body.Text, rtb_requestModific_body.Text);
            return(requsetChange);
        }
Esempio n. 2
0
 /// <summary>
 /// Modific the http request in oSession with your rule
 /// </summary>
 /// <param name="oSession">oSession</param>
 /// <param name="nowFiddlerRequsetChange">FiddlerRequsetChange</param>
 public static void ModificSessionRequest(Session oSession, FiddlerRequsetChange nowFiddlerRequsetChange, Action <string> ShowError, Action <string> ShowMes)
 {
     if (nowFiddlerRequsetChange.ParameterPickList != null)
     {
         PickSessionParameter(oSession, nowFiddlerRequsetChange, ShowError, ShowMes, true);
     }
     if (nowFiddlerRequsetChange.IsRawReplace)
     {
         ReplaceSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
     }
     else
     {
         if (nowFiddlerRequsetChange.UriModific != null && nowFiddlerRequsetChange.UriModific.ModificMode != ContentModificMode.NoChange)
         {
             oSession.fullUrl = nowFiddlerRequsetChange.UriModific.GetFinalContent(oSession.fullUrl);
         }
         if (nowFiddlerRequsetChange.HeadDelList != null && nowFiddlerRequsetChange.HeadDelList.Count > 0)
         {
             foreach (var tempDelHead in nowFiddlerRequsetChange.HeadDelList)
             {
                 oSession.RequestHeaders.Remove(tempDelHead);
             }
         }
         if (nowFiddlerRequsetChange.HeadAddList != null && nowFiddlerRequsetChange.HeadAddList.Count > 0)
         {
             foreach (var tempAddHead in nowFiddlerRequsetChange.HeadAddList)
             {
                 if (tempAddHead.Contains(": "))
                 {
                     oSession.RequestHeaders.Add(tempAddHead.Remove(tempAddHead.IndexOf(": ")), tempAddHead.Substring(tempAddHead.IndexOf(": ") + 2));
                 }
                 else
                 {
                     ShowError(string.Format("error to deal add head string with [{0}]", tempAddHead));
                 }
             }
         }
         if (nowFiddlerRequsetChange.BodyModific != null && nowFiddlerRequsetChange.BodyModific.ModificMode != ContentModificMode.NoChange)
         {
             string sourceRequestBody = null;
             try  //GetRequestBodyAsString may throw exception
             {
                 //oSession.utilDecodeRequest();
                 sourceRequestBody = oSession.GetRequestBodyAsString();
             }
             catch (Exception ex)
             {
                 ShowError(string.Format("error in GetRequestBodyAsString [{0}]", ex.Message));
                 oSession.utilDecodeRequest();
                 sourceRequestBody = oSession.GetRequestBodyEncoding().GetString(oSession.requestBodyBytes);
             }
             finally
             {
                 //oSession.requestBodyBytes = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); // 直接修改内部成员
                 //oSession.ResponseBody = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); //修改内部成员 更新Content-Length ,适用于hex数据
                 oSession.utilSetRequestBody(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody));  //utilSetRequestBody 虽然会自动更新Content-Length 但是会强制使用utf8 ,适用于字符串
             }
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Replace the http request in oSession with your rule (it may call by ModificSessionRequest)
        /// </summary>
        /// <param name="oSession">oSession</param>
        /// <param name="nowFiddlerRequsetChange">FiddlerRequsetChange</param>
        public static void ReplaceSessionRequest(Session oSession, FiddlerRequsetChange nowFiddlerRequsetChange, Action <string> ShowError, Action <string> ShowMes)
        {
            string errMes;
            NameValueCollection nameValueCollection;
            HttpRequest         tempRequestHttpRequest;

            try
            {
                tempRequestHttpRequest = nowFiddlerRequsetChange.HttpRawRequest.UpdateHttpRequest(out errMes, out nameValueCollection);
            }
            catch (Exception ex)
            {
                ShowError(string.Format("Fail to ReplaceSessionResponse :{0}", ex.Message));
                return;
            }
            if (errMes != null)
            {
                ShowError(errMes);
            }
            if (nameValueCollection != null && nameValueCollection.Count > 0)
            {
                ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
            }

            oSession.oRequest.headers = new HTTPRequestHeaders();
            oSession.RequestMethod    = tempRequestHttpRequest.RequestMethod;
            try
            {
                oSession.fullUrl = tempRequestHttpRequest.RequestUri;
            }
            catch (ArgumentException ex)
            {
                if (ex.Message == "URI scheme must be http, https, or ftp")
                {
                    oSession.url = tempRequestHttpRequest.RequestUri;
                }
                else
                {
                    ShowError(ex.Message);
                }
            }
            catch (Exception ex)
            {
                ShowError(ex.Message);
            }
            ((Fiddler.HTTPHeaders)(oSession.RequestHeaders)).HTTPVersion = tempRequestHttpRequest.RequestVersions;
            if (tempRequestHttpRequest.RequestHeads != null)
            {
                foreach (var tempHead in tempRequestHttpRequest.RequestHeads)
                {
                    if (tempHead.Key == "Host")
                    {
                        oSession.oRequest.headers.Remove("Host");
                    }
                    oSession.oRequest.headers.Add(tempHead.Key, tempHead.Value);
                }
            }
            oSession.requestBodyBytes = tempRequestHttpRequest.RequestEntity;
        }
Esempio n. 4
0
        private void pb_ruleComfrim_Click(object sender, EventArgs e)
        {
            FiddlerRequsetChange  nowRequestChange  = null;
            FiddlerResponseChange nowResponseChange = null;
            IFiddlerHttpTamper    fiddlerHttpTamper = null;
            ListView tamperRuleListView             = null;

            try
            {
                switch (tabControl_Modific.SelectedIndex)
                {
                case 0:
                    nowRequestChange = GetRequestModificInfo();
                    break;

                case 1:
                    nowRequestChange = GetRequestReplaceInfo();
                    break;

                case 2:
                    nowResponseChange = GetResponseModificInfo();
                    break;

                case 3:
                    nowResponseChange = GetResponseReplaceInfo();
                    break;

                default:
                    throw new Exception("unknow http tamper tab");
                    //break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                MarkControl(tabControl_Modific.SelectedTab, Color.Plum, 2);
                nowRequestChange  = null;
                nowResponseChange = null;
            }
            finally
            {
                if (nowRequestChange != null)
                {
                    fiddlerHttpTamper  = nowRequestChange;
                    tamperRuleListView = lv_requestRuleList;
                }
                else if (nowResponseChange != null)
                {
                    fiddlerHttpTamper  = nowResponseChange;
                    tamperRuleListView = lv_responseRuleList;
                }
            }

            if (fiddlerHttpTamper == null)
            {
                return;
            }

            if (fiddlerHttpTamper.HttpFilter == null || fiddlerHttpTamper.HttpFilter.UriMatch == null)
            {
                MessageBox.Show("you Uri Filter is not legal \r\n check it again", "edit again");
                MarkControl(groupBox_urlFilter, Color.Plum, 2);
                return;
            }

            ListViewItem nowRuleItem = null;

            foreach (ListViewItem tempItem in tamperRuleListView.Items)
            {
                if (tempItem == EditListViewItem)
                {
                    continue;
                }
                //if (fiddlerHttpTamper.HttpFilter.UriMatch.Equals(tempItem.Tag))
                if (fiddlerHttpTamper.HttpFilter.Equals(tempItem.Tag))
                {
                    MarkRuleItem(tempItem, Color.Plum, 2);
                    DialogResult tempDs;
                    //add mode
                    if (EditListViewItem == null)
                    {
                        tempDs = MessageBox.Show(string.Format("find same url filter with [Rule:{0}], do you want create the same uri rule \r\n    [Yes]       new a same url filter rule \r\n    [No]       update the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            nowRuleItem = tempItem;
                            SyncEnableSateToIFiddlerHttpTamper(nowRuleItem, fiddlerHttpTamper);
                            UpdataRuleToListView(nowRuleItem, fiddlerHttpTamper, true);
                            break;
                        }
                        else
                        {
                            return;
                        }
                    }
                    //edit mode
                    else
                    {
                        tempDs = MessageBox.Show(string.Format("find same uri filter with [Rule:{0}], do you want save the rule \r\n    [Yes]       skip the same uri filter rule \r\n    [No]       remove the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            tamperRuleListView.Items.Remove(tempItem);
                            continue;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            if (nowRuleItem == null)
            {
                if (EditListViewItem == null)
                {
                    AddRuleToListView(tamperRuleListView, fiddlerHttpTamper, true);
                }
                else
                {
                    SyncEnableSateToIFiddlerHttpTamper(EditListViewItem, fiddlerHttpTamper);
                    UpdataRuleToListView(EditListViewItem, fiddlerHttpTamper, true);
                }
            }
            ChangeEditRuleMode(RuleEditMode.NewRuleMode, null, null);
        }
Esempio n. 5
0
        public void AutoTamperRequestBefore(Session oSession)
        {
            //if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("api.map.baidu.com"))
            //{
            //    oSession["x-OverrideSslProtocols"] = "ssl3.0";
            //}
            //oSession.oRequest["AddOrigin"] = "from lijie PC";
            if (!isOnLoad)
            {
                return;
            }
            if (myFreeHttpWindow.IsRequestRuleEnable)
            {
                //IsRequestRuleEnable is more efficient then string comparison (so if not IsRequestRuleEnable the string comparison will not execute)
                if (isSkipUiHide && oSession["ui-hide"] == "true")
                {
                    return;
                }
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipTlsHandshake && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <ListViewItem> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.RequestRuleListView, true);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerRequsetChange nowFiddlerRequsetChange = ((FiddlerRequsetChange)matchItem.Tag);
                        FreeHttpWindow.MarkMatchRule(matchItem);
                        MarkSession(oSession);
                        ShowMes(string.Format("macth the [requst rule {0}] with {1}", matchItem.SubItems[0].Text, oSession.fullUrl));
                        FiddlerSessionTamper.ModificSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
                        if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                        {
                            break;
                        }
                    }
                }
            }

            if (myFreeHttpWindow.IsResponseRuleEnable)
            {
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipTlsHandshake && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <ListViewItem> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.ResponseRuleListView, false);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem.Tag);
                        if (nowFiddlerResponseChange.IsIsDirectRespons)
                        {
                            FreeHttpWindow.MarkMatchRule(matchItem);
                            MarkSession(oSession);
                            ShowMes(string.Format("macth the [reponse rule {0}] with {1}", matchItem.SubItems[0].Text, oSession.fullUrl));
                            FiddlerSessionTamper.ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                            //oSession.state = SessionStates.Done;
                            if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        private void SetRequestModificInfo(FiddlerRequsetChange fiddlerRequsetChange)
        {
            SetHttpMatch(fiddlerRequsetChange.HttpFilter);
            SetHttpParameterPick(fiddlerRequsetChange.ParameterPickList);
            if (fiddlerRequsetChange.HttpRawRequest == null)
            {
                tabControl_Modific.SelectedIndex = 0;
                if (fiddlerRequsetChange.UriModific != null && fiddlerRequsetChange.UriModific.ModificMode != ContentModificMode.NoChange)
                {
                    tb_requestModific_uriModificKey.Text   = fiddlerRequsetChange.UriModific.TargetKey;
                    tb_requestModific_uriModificValue.Text = fiddlerRequsetChange.UriModific.ReplaceContent;
                }
                if (fiddlerRequsetChange.HeadDelList != null)
                {
                    foreach (string tempHead in fiddlerRequsetChange.HeadDelList)
                    {
                        requestRemoveHeads.ListDataView.Items.Add(tempHead);
                    }
                }
                if (fiddlerRequsetChange.HeadAddList != null)
                {
                    foreach (string tempHead in fiddlerRequsetChange.HeadAddList)
                    {
                        requestAddHeads.ListDataView.Items.Add(tempHead);
                    }
                }
                if (fiddlerRequsetChange.BodyModific != null && fiddlerRequsetChange.BodyModific.ModificMode != ContentModificMode.NoChange)
                {
                    tb_requestModific_body.Text = fiddlerRequsetChange.BodyModific.TargetKey;
                    rtb_requestModific_body.AppendText(fiddlerRequsetChange.BodyModific.ReplaceContent);
                }
            }
            else
            {
                tabControl_Modific.SelectedIndex = 1;
                if (IsRequestReplaceRawMode)
                {
                    pb_requestReplace_changeMode_Click(null, null);
                }
                cb_editRequestMethod.Text  = fiddlerRequsetChange.HttpRawRequest.RequestMethod;
                tb_requestReplace_uri.Text = fiddlerRequsetChange.HttpRawRequest.RequestUri;
                cb_editRequestEdition.Text = fiddlerRequsetChange.HttpRawRequest.RequestVersions;
                if (fiddlerRequsetChange.HttpRawRequest.RequestHeads != null)
                {
                    foreach (MyKeyValuePair <string, string> tempHead in fiddlerRequsetChange.HttpRawRequest.RequestHeads)
                    {
                        elv_requsetReplace.ListDataView.Items.Add(string.Format("{0}: {1}", tempHead.Key, tempHead.Value));
                    }
                }
                if (fiddlerRequsetChange.HttpRawRequest.RequestEntity != null && fiddlerRequsetChange.HttpRawRequest.RequestEntity.Length > 0)
                {
                    //if (fiddlerRequsetChange.HttpRawRequest.ParameterizationContent.hasParameter && fiddlerRequsetChange.HttpRawRequest.OriginSting != null)
                    //{
                    //    HttpRequest tempRequest = HttpRequest.GetHttpRequest(fiddlerRequsetChange.HttpRawRequest.OriginSting);
                    //    if(tempRequest.RequestEntity!=null)
                    //    {
                    //        rtb_requsetReplace_body.AppendText(Encoding.UTF8.GetString(tempRequest.RequestEntity));
                    //    }
                    //}


                    //rtb_requsetReplace_body.AppendText(Encoding.UTF8.GetString(fiddlerRequsetChange.HttpRawRequest.RequestEntity));//文件实体无法还原原始值
                    Encoding tempEncoding = Encoding.GetEncoding("utf-8", new EncoderExceptionFallback(), new DecoderExceptionFallback());
                    string   tempStr      = null;
                    try
                    {
                        tempStr = tempEncoding.GetString(fiddlerRequsetChange.HttpRawRequest.RequestEntity);
                    }
                    catch (ArgumentException)
                    {
                        String tempOriginSting = fiddlerRequsetChange.HttpRawRequest.OriginSting;
                        if (!string.IsNullOrEmpty(tempOriginSting))
                        {
                            int startIndex = tempOriginSting.IndexOf("\r\n\r\n");
                            if (startIndex > 0) //can not is 0 (must have request line)
                            {
                                tempStr = tempOriginSting.Remove(0, startIndex + 4);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        PutError(string.Format("analysis request replace rule error {0}", ex.Message));
                    }
                    finally
                    {
                        tempStr = tempStr ?? "analysis request replace rule error in request body , pleace reedit";
                    }
                    rtb_requsetReplace_body.AppendText(tempStr);
                }
                if (fiddlerRequsetChange.HttpRawRequest.OriginSting != null)
                {
                    rtb_requestRaw.AppendText(fiddlerRequsetChange.HttpRawRequest.OriginSting);
                }
                if (fiddlerRequsetChange.HttpRawRequest.ParameterizationContent.hasParameter)
                {
                    useParameterDataToolStripMenuItem.Checked = true;
                }
            }
        }
Esempio n. 7
0
        private FiddlerRequsetChange GetRequestReplaceInfo()
        {
            FiddlerRequsetChange requsetReplace = new FiddlerRequsetChange();

            requsetReplace.ActuatorStaticDataController = new FiddlerActuatorStaticDataCollectionController(StaticDataCollection);
            requsetReplace.HttpFilter        = GetHttpFilter();
            requsetReplace.ParameterPickList = GetParameterPick();
            if (IsRequestReplaceRawMode)
            {
                requsetReplace.HttpRawRequest = ParameterHttpRequest.GetHttpRequest(rtb_requestRaw.Text.Replace("\n", "\r\n"), useParameterDataToolStripMenuItem.Checked, StaticDataCollection);
            }
            else
            {
                requsetReplace.HttpRawRequest = new ParameterHttpRequest();
                //requsetReplace.HttpRawRequest.RequestMethod = cb_editRequestMethod.Text;
                //requsetReplace.HttpRawRequest.RequestUri = tb_requestReplace_uri.Text;
                //requsetReplace.HttpRawRequest.RequestVersions = cb_editRequestEdition.Text;
                //Set RequestLine will updata RequestMethod/RequestUri/RequestVersions
                requsetReplace.HttpRawRequest.RequestLine = string.Format("{0} {1} {2}", cb_editRequestMethod.Text, tb_requestReplace_uri.Text, cb_editRequestEdition.Text);
                StringBuilder requestSb = new StringBuilder(requsetReplace.HttpRawRequest.RequestLine);
                requestSb.Append("\r\n");
                requsetReplace.HttpRawRequest.RequestHeads = new List <MyKeyValuePair <string, string> >();
                if (elv_requsetReplace.ListDataView.Items.Count > 0)
                {
                    foreach (ListViewItem item in elv_requsetReplace.ListDataView.Items)
                    {
                        string headStr = item.Text;
                        if (headStr.Contains(": "))
                        {
                            string key   = headStr.Remove(headStr.IndexOf(": "));
                            string value = headStr.Substring(headStr.IndexOf(": ") + 2);
                            requsetReplace.HttpRawRequest.RequestHeads.Add(new MyKeyValuePair <string, string>(key, value));
                        }
                        else
                        {
                            throw new Exception(string.Format("find eror head with {0}", headStr));
                        }
                        requestSb.AppendLine(headStr);
                    }
                    requestSb.Append("\r\n");
                }

                string tempRequstBody = rtb_requsetReplace_body.Text;
                requestSb.Append(tempRequstBody); //HttpEntity not need end with new line
                if (tempRequstBody.StartsWith("<<replace file path>>"))
                {
                    string tempPath = tempRequstBody.Remove(0, 21);
                    if (File.Exists(tempPath))
                    {
                        using (FileStream fileStream = new FileStream(tempPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                        {
                            if (fileStream.Length > int.MaxValue)
                            {
                                throw new Exception(string.Format("your file path in  ResponseEntity is too  large with {0}", tempPath));
                            }
                            requsetReplace.HttpRawRequest.RequestEntity = new byte[fileStream.Length];
                            fileStream.Position = 0;
                            fileStream.Read(requsetReplace.HttpRawRequest.RequestEntity, 0, requsetReplace.HttpRawRequest.RequestEntity.Length);
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("your file path in  ResponseEntity is not Exists with {0}", tempPath));
                    }
                }
                else
                {
                    requsetReplace.HttpRawRequest.RequestEntity = Encoding.UTF8.GetBytes(tempRequstBody);
                }
                requsetReplace.HttpRawRequest.ParameterizationContent = new AutoTest.ParameterizationContent.CaseParameterizationContent(requestSb.ToString(), useParameterDataToolStripMenuItem.Checked);
                requsetReplace.HttpRawRequest.OriginSting             = requsetReplace.HttpRawRequest.ParameterizationContent.GetTargetContentData();
                requsetReplace.HttpRawRequest.SetActuatorStaticDataCollection(StaticDataCollection);
            }

            if (antoContentLengthToolStripMenuItem.Checked)
            {
                requsetReplace.HttpRawRequest.SetAutoContentLength();
            }
            return(requsetReplace);
        }
Esempio n. 8
0
 /// <summary>
 /// Modific the http request in oSession with your rule
 /// </summary>
 /// <param name="oSession">oSession</param>
 /// <param name="nowFiddlerRequsetChange">FiddlerRequsetChange</param>
 public static void ModificSessionRequest(Session oSession, FiddlerRequsetChange nowFiddlerRequsetChange, Action <string> ShowError, Action <string> ShowMes)
 {
     if (nowFiddlerRequsetChange.ParameterPickList != null)
     {
         PickSessionParameter(oSession, nowFiddlerRequsetChange, ShowError, ShowMes, true);
     }
     if (nowFiddlerRequsetChange.IsRawReplace)
     {
         ReplaceSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
     }
     else
     {
         if (nowFiddlerRequsetChange.UriModific != null && nowFiddlerRequsetChange.UriModific.ModificMode != ContentModificMode.NoChange)
         {
             oSession.fullUrl = nowFiddlerRequsetChange.UriModific.GetFinalContent(oSession.fullUrl);
         }
         if (nowFiddlerRequsetChange.HeadDelList != null && nowFiddlerRequsetChange.HeadDelList.Count > 0)
         {
             foreach (var tempDelHead in nowFiddlerRequsetChange.HeadDelList)
             {
                 oSession.RequestHeaders.Remove(tempDelHead);
             }
         }
         if (nowFiddlerRequsetChange.HeadAddList != null && nowFiddlerRequsetChange.HeadAddList.Count > 0)
         {
             foreach (var tempAddHead in nowFiddlerRequsetChange.HeadAddList)
             {
                 if (tempAddHead.Contains(": "))
                 {
                     oSession.RequestHeaders.Add(tempAddHead.Remove(tempAddHead.IndexOf(": ")), tempAddHead.Substring(tempAddHead.IndexOf(": ") + 2));
                 }
                 else
                 {
                     ShowError(string.Format("error to deal add head string with [{0}]", tempAddHead));
                 }
             }
         }
         if (nowFiddlerRequsetChange.BodyModific != null && nowFiddlerRequsetChange.BodyModific.ModificMode != ContentModificMode.NoChange)
         {
             if (nowFiddlerRequsetChange.BodyModific.ModificMode == ContentModificMode.HexReplace)
             {
                 try
                 {
                     oSession.RequestBody = nowFiddlerRequsetChange.BodyModific.GetFinalContent(oSession.requestBodyBytes);
                 }
                 catch (Exception ex)
                 {
                     ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                 }
             }
             else
             {
                 string sourceRequestBody = null;
                 try  //GetRequestBodyAsString may throw exception
                 {
                     //oSession.utilDecodeRequest();
                     sourceRequestBody = oSession.GetRequestBodyAsString();
                 }
                 catch (Exception ex)
                 {
                     ShowError(string.Format("error in GetRequestBodyAsString [{0}]", ex.Message));
                     oSession.utilDecodeRequest();
                     sourceRequestBody = oSession.GetRequestBodyEncoding().GetString(oSession.requestBodyBytes);
                 }
                 finally
                 {
                     //oSession.requestBodyBytes = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); // requestBodyBytes直接修改内部成员
                     //oSession.ResponseBody = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); //ResponseBody修改内部成员 更新Content-Length ,同时删除编码头,适用于hex数据
                     //Session.RequestBody : Gets or Sets the HTTP Request body bytes. Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. Setter DOES NOT CLONE the passed array. Setter will throw if the Request object does not exist for some reason. Use utilSetRequestBody(sStr) to ensure proper character encoding if you need to use a string.
                     oSession.utilSetRequestBody(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody));  //utilSetRequestBody 虽然会自动更新Content-Length 但是会强制使用utf8 ,适用于字符串
                 }
             }
         }
     }
 }