Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.73 KB | None | 0 0
  1. // так используем
  2. var trafficItems = instance.ActiveTab.GetTraffic();        
  3. var trafficModel = new TrafficModel(trafficItems);
  4. string serializedTraffic = Global.ZennoLab.Json.JsonConvert.SerializeObject(trafficModel);
  5. File.WriteAllText(@"C:\tmp\traffic.har", serializedTraffic);
  6.  
  7. // остальное в общий код
  8. [Serializable]
  9.     public class TrafficModel
  10.     {
  11.         public TrafficModel(IEnumerable<TrafficItem> trafficItems)
  12.         {
  13.             log = new ModelLog(trafficItems);
  14.         }
  15.  
  16.         public ModelLog log;
  17.        
  18.         [Serializable]
  19.         public class ModelLog
  20.         {
  21.             public ModelLog(IEnumerable<TrafficItem> trafficItems)
  22.             {
  23.                 foreach (var trafficItem in trafficItems)
  24.                 {
  25.                     entries.Add(new ModelEntry(trafficItem));
  26.                 }
  27.             }
  28.  
  29.             public List<ModelEntry> entries = new List<ModelEntry>();
  30.  
  31.             [Serializable]
  32.             public class ModelEntry
  33.             {
  34.                 public ModelEntry(TrafficItem trafficItem)
  35.                 {
  36.                     time = trafficItem.Time;
  37.                     request = new ModelRequest(trafficItem);
  38.                     response = new ModelResponse(trafficItem);
  39.                 }
  40.  
  41.                 public int time;
  42.                 public ModelRequest request;
  43.                 public ModelResponse response;
  44.             }
  45.  
  46.             [Serializable]
  47.             public class ModelRequest
  48.             {
  49.                 public ModelRequest(TrafficItem trafficItem)
  50.                 {
  51.                     method = trafficItem.Method;
  52.                     url = trafficItem.Url;
  53.                     cookies = ModelJsonKeyValue.FromString(trafficItem.RequestCookies, ";", "=");
  54.                     headers = ModelJsonKeyValue.FromString(trafficItem.RequestHeaders, "\n", ":");
  55.                     queryString = ModelJsonKeyValue.FromString(trafficItem.RequestQuery, "&", "=");
  56.                 }
  57.  
  58.                 public string method;
  59.                 public string url;
  60.                 public List<ModelJsonKeyValue> cookies;
  61.                 public List<ModelJsonKeyValue> headers;
  62.                 public List<ModelJsonKeyValue> queryString;
  63.             }
  64.  
  65.             [Serializable]
  66.             public class ModelResponse
  67.             {
  68.                 public ModelResponse(TrafficItem trafficItem)
  69.                 {
  70.                     status = trafficItem.ResultCode;
  71.                     statusText = status == 200 ? "OK" : "not ok";
  72.                     cookies = ModelJsonKeyValue.FromString(trafficItem.ResponseCookies, ";", "=");
  73.                     headers = ModelJsonKeyValue.FromString(trafficItem.ResponseHeaders, "\n", ":");
  74.                     content = new ModelContent(trafficItem);
  75.                    
  76.                 }
  77.  
  78.                 public uint status;
  79.                 public string statusText;
  80.                 public List<ModelJsonKeyValue> cookies;
  81.                 public List<ModelJsonKeyValue> headers;
  82.                 public ModelContent content;
  83.  
  84.                 [Serializable]
  85.                 public class ModelContent
  86.                 {
  87.                     public ModelContent(TrafficItem trafficItem)
  88.                     {
  89.                         mimeType = trafficItem.ResponseContentType;
  90.                         text = Encoding.UTF8.GetString(trafficItem.ResponseBody ?? new byte[]{});
  91.                     }
  92.  
  93.                     public string mimeType;
  94.                     public string text;
  95.                 }
  96.             }
  97.         }
  98.     }
  99.  
  100.     public class ModelJsonKeyValue
  101.     {
  102.         public ModelJsonKeyValue(string name, string value)
  103.         {
  104.             this.name = name;
  105.             this.value = value;
  106.         }
  107.  
  108.         public string name;
  109.         public string value;
  110.  
  111.         public static List<ModelJsonKeyValue> FromString(string keyValuesString, string pairSeparator, string keyValueSeparator)
  112.         {
  113.            
  114.             return keyValuesString
  115.                 .Split(new []{pairSeparator}, StringSplitOptions.RemoveEmptyEntries)
  116.                 .Select(p => KeyValueFromString(p, keyValueSeparator))
  117.                 .ToList();
  118.  
  119.            
  120.         }
  121.        
  122.         public static ModelJsonKeyValue KeyValueFromString(string keyValueString, string keyValueSeparator)
  123.             {
  124.                 string[] splitted = keyValueString
  125.                     .Split(new[] {keyValueSeparator}, 2, StringSplitOptions.None);
  126.                
  127.                 string key   = splitted.Length >= 1 ? splitted[0] : "";
  128.                 string value = splitted.Length >= 2 ? splitted[1] : "";
  129.  
  130.                 return new ModelJsonKeyValue(key, value);
  131.             }
  132.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement