Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // так используем
- var trafficItems = instance.ActiveTab.GetTraffic();
- var trafficModel = new TrafficModel(trafficItems);
- string serializedTraffic = Global.ZennoLab.Json.JsonConvert.SerializeObject(trafficModel);
- File.WriteAllText(@"C:\tmp\traffic.har", serializedTraffic);
- // остальное в общий код
- [Serializable]
- public class TrafficModel
- {
- public TrafficModel(IEnumerable<TrafficItem> trafficItems)
- {
- log = new ModelLog(trafficItems);
- }
- public ModelLog log;
- [Serializable]
- public class ModelLog
- {
- public ModelLog(IEnumerable<TrafficItem> trafficItems)
- {
- foreach (var trafficItem in trafficItems)
- {
- entries.Add(new ModelEntry(trafficItem));
- }
- }
- public List<ModelEntry> entries = new List<ModelEntry>();
- [Serializable]
- public class ModelEntry
- {
- public ModelEntry(TrafficItem trafficItem)
- {
- time = trafficItem.Time;
- request = new ModelRequest(trafficItem);
- response = new ModelResponse(trafficItem);
- }
- public int time;
- public ModelRequest request;
- public ModelResponse response;
- }
- [Serializable]
- public class ModelRequest
- {
- public ModelRequest(TrafficItem trafficItem)
- {
- method = trafficItem.Method;
- url = trafficItem.Url;
- cookies = ModelJsonKeyValue.FromString(trafficItem.RequestCookies, ";", "=");
- headers = ModelJsonKeyValue.FromString(trafficItem.RequestHeaders, "\n", ":");
- queryString = ModelJsonKeyValue.FromString(trafficItem.RequestQuery, "&", "=");
- }
- public string method;
- public string url;
- public List<ModelJsonKeyValue> cookies;
- public List<ModelJsonKeyValue> headers;
- public List<ModelJsonKeyValue> queryString;
- }
- [Serializable]
- public class ModelResponse
- {
- public ModelResponse(TrafficItem trafficItem)
- {
- status = trafficItem.ResultCode;
- statusText = status == 200 ? "OK" : "not ok";
- cookies = ModelJsonKeyValue.FromString(trafficItem.ResponseCookies, ";", "=");
- headers = ModelJsonKeyValue.FromString(trafficItem.ResponseHeaders, "\n", ":");
- content = new ModelContent(trafficItem);
- }
- public uint status;
- public string statusText;
- public List<ModelJsonKeyValue> cookies;
- public List<ModelJsonKeyValue> headers;
- public ModelContent content;
- [Serializable]
- public class ModelContent
- {
- public ModelContent(TrafficItem trafficItem)
- {
- mimeType = trafficItem.ResponseContentType;
- text = Encoding.UTF8.GetString(trafficItem.ResponseBody ?? new byte[]{});
- }
- public string mimeType;
- public string text;
- }
- }
- }
- }
- public class ModelJsonKeyValue
- {
- public ModelJsonKeyValue(string name, string value)
- {
- this.name = name;
- this.value = value;
- }
- public string name;
- public string value;
- public static List<ModelJsonKeyValue> FromString(string keyValuesString, string pairSeparator, string keyValueSeparator)
- {
- return keyValuesString
- .Split(new []{pairSeparator}, StringSplitOptions.RemoveEmptyEntries)
- .Select(p => KeyValueFromString(p, keyValueSeparator))
- .ToList();
- }
- public static ModelJsonKeyValue KeyValueFromString(string keyValueString, string keyValueSeparator)
- {
- string[] splitted = keyValueString
- .Split(new[] {keyValueSeparator}, 2, StringSplitOptions.None);
- string key = splitted.Length >= 1 ? splitted[0] : "";
- string value = splitted.Length >= 2 ? splitted[1] : "";
- return new ModelJsonKeyValue(key, value);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement