public void Pierce(PierceSetting setting) { foreach (var target in setting.Targets) { Run(target, setting); } }
private void RunTask(HttpClient client, DateTime executeTime, string target, PierceSetting setting, SpearTask task, int index) { Thread.Sleep(setting.Duration); task.Run(client); task.Task.Wait(); presenter.Handle(executeTime, target, task, setting, index); }
private HttpRequestMessage CreateRequestMessage(PierceSetting setting) { var request = new HttpRequestMessage(setting.HttpMethod, setting.Url); foreach (var headerKv in setting.Headers) { request.Headers.Add(headerKv.Key, headerKv.Value.ToString()); } return(request); }
public void Handle(DateTime time, string target, SpearTask task, PierceSetting setting, int count) { var directoryPath = Path.Combine(setting.OutputPath, "Result_" + time.ToString("yyyyMMddHHmmss"), target); var directoryFullPath = Path.Combine(directoryPath, task.Setting.SpearName); if (!Directory.Exists(directoryFullPath)) { Directory.CreateDirectory(directoryFullPath); } var fileFullPath = Path.Combine(directoryFullPath, count + ".txt"); Output(fileFullPath, task); }
private void Run(string target, PierceSetting setting) { var client = GenerateHttpClient(setting); var tasks = GenerateTasks(target, setting); var executeTime = DateTime.Now; foreach (var tpl in tasks.Select((task, index) => new { task, index = index + 1 })) { RunTask(client, executeTime, target, setting, tpl.task, tpl.index); } foreach (var task in tasks) { task.Dispose(); } }
private HttpClient GenerateHttpClient(PierceSetting setting) { var cookieContainer = new CookieContainer(); foreach (var cookie in setting.Cookie) { cookieContainer.SetCookies(new Uri(setting.Url), cookie.Key + "=" + cookie.Value); } HttpClientHandler handler = new HttpClientHandler { CookieContainer = cookieContainer }; if (!string.IsNullOrEmpty(setting.Proxy)) { handler.Proxy = new WebProxy(setting.Proxy); } var client = new HttpClient(handler); return(client); }
private List <SpearTask> GenerateTasks(string target, PierceSetting setting) { var tasks = new List <SpearTask>(); foreach (var tpl in SpearSettings .Where(x => setting.Spears.Contains(x.SpearName)) .SelectMany(x => x.Parameters.Select(param => Tuple.Create(x, param))) ) { var spearSetting = tpl.Item1; var param = tpl.Item2; var body = (JObject)setting.Content.DeepClone(); var parameter = spearSetting.Mode == Mode.Append ? body[target] + param : param; body[target] = parameter; var request = CreateRequestMessage(setting); var requestContent = RegisterContent(setting, request, body); tasks.Add(new SpearTask(spearSetting, param, request, requestContent)); } return(tasks); }
private string RegisterContent(PierceSetting setting, HttpRequestMessage request, JObject body) { string requestContent; if (request.Method.Equals(HttpMethod.Get)) { var queryString = CreateQueryParameter(body); request.RequestUri = new Uri(request.RequestUri, "?" + queryString); requestContent = queryString; } else if (setting.ContentType != "json") { var queryString = CreateQueryParameter(body); request.Content = new StringContent(queryString); requestContent = queryString; } else { request.Content = new StringContent(body.ToString(), Encoding.UTF8, "application/json"); requestContent = body.ToString(); } return(requestContent); }