public Stream RequestStream(IUriBuilder uriBuilder, HttpMethod method, Dictionary<string, object> parameters, byte[] body) { Func<int, string, string> buildExceptionMessage; var request = BuildRequest(uriBuilder, method, parameters, body, out buildExceptionMessage); var response = GetResponse(request, (statusCode, content) => string.Format("RequestStream exception. Parameters: method = {1}, uri = {0}. Response: {2} - {3}.", uriBuilder.Build(), method, statusCode, content)); return response.GetResponseStream(); }
public async Task DownloadAsync(InputParameters input) { using (HttpClient client = new HttpClient()) { var taskList = new List <Task <string> >(input.ReferatsAmount); var rand = new Random(); // Create and start the tasks. for (int i = 0; i < input.ReferatsAmount; i++) { var uri = uriBuilder.Build(input); var task = ProcessURLAsync(uri, client); taskList.Add(task); } foreach (var task in taskList) { var res = await task; } } }
public string Upload(IUriBuilder uriBuilder, Dictionary <string, object> parameters, params File[] files) { var uri = uriBuilder.Build(); var mimeParts = new List <MimePart>(); try { var request = WebRequest.Create(uri); foreach (var key in parameters.Keys) { var part = new StringMimePart(); part.Headers["Content-Disposition"] = "form-data; name=\"" + key + "\""; part.StringData = parameters[key].ToString(); mimeParts.Add(part); } var nameIndex = 0; foreach (var file in files) { var part = new StreamMimePart(); if (string.IsNullOrEmpty(file.FieldName)) { file.FieldName = "file" + nameIndex++; } part.Headers["Content-Disposition"] = "form-data; name=\"" + file.FieldName + "\"; filename=\"" + file.Path + "\""; part.Headers["Content-Type"] = File.ContentType; part.SetStream(file.Data); mimeParts.Add(part); } var boundary = "----------" + DateTime.Now.Ticks.ToString("x"); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; var footer = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); var contentLength = mimeParts.Sum(part => part.GenerateHeaderFooterData(boundary)); request.ContentLength = contentLength + footer.Length; var buffer = new byte[8192]; var afterFile = Encoding.UTF8.GetBytes("\r\n"); using (var s = request.GetRequestStream()) { foreach (var part in mimeParts) { s.Write(part.Header, 0, part.Header.Length); int read; while ((read = part.Data.Read(buffer, 0, buffer.Length)) > 0) { s.Write(buffer, 0, read); } part.Data.Dispose(); s.Write(afterFile, 0, afterFile.Length); } s.Write(footer, 0, footer.Length); } return(GetContent(request, (statusCode, content) => string.Format("Upload failed. Parameters: uri = {0}. Files: {1}. Response: {2} - {3}", uri.AbsoluteUri, string.Join(";", files.Select(x => x.Path)), statusCode, content))); } finally { foreach (var mimePart in mimeParts.Where(part => part.Data != null)) { mimePart.Data.Dispose(); } } }
public Stream RequestStream(IUriBuilder uriBuilder, HttpMethod method, Dictionary <string, object> parameters, byte[] body, string accessToken) { Func <int, string, string> buildExceptionMessage; var request = BuildRequest(uriBuilder, method, parameters, body, accessToken, out buildExceptionMessage); var response = GetResponse(request, (statusCode, content) => string.Format("RequestStream exception. Parameters: method = {1}, uri = {0}. Response: {2} - {3}.", uriBuilder.Build(), method, statusCode, content)); return(response.GetResponseStream()); }
public Uri Build() { return(_uriBuilder.Build()); }
private static WebRequest BuildRequest(IUriBuilder uriBuilder, HttpMethod method, Dictionary <string, object> parameters, byte[] body, out Func <int, string, string> buildExceptionMessage) { var uri = method != HttpMethod.Put ? uriBuilder.AddQueryParameters(parameters).Build() : uriBuilder.Build(); var request = WebRequest.Create(uri); request.Method = method.GetParameterName(); request.ContentType = "application/json"; body = body ?? new byte[0]; if (method == HttpMethod.Put) { var serializer = new SoundCloud.API.Client.Internal.Infrastructure.Serialization.JsonSerializer(); var serialized = serializer.Serialize(parameters); body = Encoding.UTF8.GetBytes(serialized); } if ((method == HttpMethod.Post || method == HttpMethod.Put) && body.Length > 0) { request.ContentLength = body.Length; using (var requestStream = request.GetRequestStream()) { requestStream.Write(body, 0, body.Length); requestStream.Flush(); } } else { request.ContentLength = 0; } request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); buildExceptionMessage = (statusCode, content) => string.Format("WebRequest exception. Parameters: method = {1}, uri = {0}. Response: {2} - {3}.", uri.AbsoluteUri, method, statusCode, content); return(request); }
public string Upload(IUriBuilder uriBuilder, Dictionary<string, object> parameters, params File[] files) { var uri = uriBuilder.Build(); var mimeParts = new List<MimePart>(); try { var request = WebRequest.Create(uri); foreach (var key in parameters.Keys) { var part = new StringMimePart(); part.Headers["Content-Disposition"] = "form-data; name=\"" + key + "\""; part.StringData = parameters[key].ToString(); mimeParts.Add(part); } var nameIndex = 0; foreach (var file in files) { var part = new StreamMimePart(); if (string.IsNullOrEmpty(file.FieldName)) file.FieldName = "file" + nameIndex++; part.Headers["Content-Disposition"] = "form-data; name=\"" + file.FieldName + "\"; filename=\"" + file.Path + "\""; part.Headers["Content-Type"] = File.ContentType; part.SetStream(file.Data); mimeParts.Add(part); } var boundary = "----------" + DateTime.Now.Ticks.ToString("x"); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; var footer = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); var contentLength = mimeParts.Sum(part => part.GenerateHeaderFooterData(boundary)); request.ContentLength = contentLength + footer.Length; var buffer = new byte[8192]; var afterFile = Encoding.UTF8.GetBytes("\r\n"); using (var s = request.GetRequestStream()) { foreach (var part in mimeParts) { s.Write(part.Header, 0, part.Header.Length); int read; while ((read = part.Data.Read(buffer, 0, buffer.Length)) > 0) { s.Write(buffer, 0, read); } part.Data.Dispose(); s.Write(afterFile, 0, afterFile.Length); } s.Write(footer, 0, footer.Length); } return GetContent(request, (statusCode, content) => string.Format("Upload failed. Parameters: uri = {0}. Files: {1}. Response: {2} - {3}", uri.AbsoluteUri, string.Join(";", files.Select(x => x.Path)), statusCode, content)); } finally { foreach (var mimePart in mimeParts.Where(part => part.Data != null)) { mimePart.Data.Dispose(); } } }
private static WebRequest BuildRequest(IUriBuilder uriBuilder, HttpMethod method, Dictionary<string, object> parameters, byte[] body, out Func<int, string, string> buildExceptionMessage) { var uri = method != HttpMethod.Put ? uriBuilder.AddQueryParameters(parameters).Build() : uriBuilder.Build(); var request = WebRequest.Create(uri); request.Method = method.GetParameterName(); request.ContentType = "application/json"; body = body ?? new byte[0]; if (method == HttpMethod.Put) { var serializer = new SoundCloud.API.Client.Internal.Infrastructure.Serialization.JsonSerializer(); var serialized = serializer.Serialize(parameters); body = Encoding.UTF8.GetBytes(serialized); } if ((method == HttpMethod.Post || method == HttpMethod.Put) && body.Length > 0) { request.ContentLength = body.Length; using (var requestStream = request.GetRequestStream()) { requestStream.Write(body, 0, body.Length); requestStream.Flush(); } } else { request.ContentLength = 0; } request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); buildExceptionMessage = (statusCode, content) => string.Format("WebRequest exception. Parameters: method = {1}, uri = {0}. Response: {2} - {3}.", uri.AbsoluteUri, method, statusCode, content); return request; }