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;
                }
            }
        }
Exemple #3
0
        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();
                }
            }
        }
Exemple #4
0
        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;
        }