Exemplo n.º 1
0
        /// <summary>
        ///     Create an <see cref="HttpWebRequest" /> from the given <see cref="IHttpRequest" /> instance
        /// </summary>
        /// <param name="request">The instance of <see cref="IHttpRequest" /></param>
        /// <param name="progress">The progress reporter</param>
        /// <returns>An instance of <see cref="HttpWebRequest" /></returns>
        protected virtual HttpWebRequest CreateRequest(IHttpRequest request, Interfaces.Infrastructure.IProgress <double> progress)
        {
            var            uri = request.GetUri();
            HttpWebRequest realRequest;

            if (uri.Scheme == Uri.UriSchemeHttps)
            {
                realRequest = (HttpWebRequest)WebRequest.Create(uri);
                realRequest.ProtocolVersion = HttpVersion.Version11;
            }
            else
            {
                realRequest = (HttpWebRequest)WebRequest.Create(request.GetUri());
            }

            realRequest.Method = request.GetMethod();
            var headers = request.GetHeaders();

            headers.Keys.ToList().ForEach(key =>
            {
                var handler = HeaderHandlers.FirstOrDefault(h => h.CanSetHeader(realRequest, key));
                if (null != handler)
                {
                    handler.SetHeader(realRequest, key, headers[key]);
                }
                else
                {
                    realRequest.Headers.Add(key, headers[key]);
                }
            });
            return(SetBody(realRequest, request.GetBody(), progress));
        }
Exemplo n.º 2
0
 /// <summary>
 ///     Send an http request using the prebuilt <see cref="IRequestBuilder{T}" /> to build a request from the
 ///     <typeparamref name="TParameter" />
 /// </summary>
 /// <typeparam name="TResult">The type of the result</typeparam>
 /// <typeparam name="TParameter">The type of the parameter</typeparam>
 /// <param name="parameter">The parameter instance</param>
 /// <param name="progress">The progress reporter</param>
 /// <returns>The data returned from the server</returns>
 protected async Task <TResult> FetchAsync <TResult, TParameter>(TParameter parameter,
                                                                 Interfaces.Infrastructure.IProgress <double> progress = null)
     where TParameter : HttpParameter
 {
     return(await TaskBuilder.Run(async() =>
     {
         try
         {
             return ResponseResolver.Resolve <TResult>(Client.GetResponse(await CreateHttpRequest(parameter), progress));
         }
         catch (Exception e)
         {
             Error(e);
             return default(TResult);
         }
     }).ConfigureAwait(false));
 }
Exemplo n.º 3
0
        private static HttpWebRequest SetBody(HttpWebRequest request, Stream body, Interfaces.Infrastructure.IProgress <double> progress)
        {
            if (body != null && body.Length > 0)
            {
                //Ensure that we have ContentLength set in the headers
                if (request.ContentLength == 0)
                {
                    request.ContentLength = body.Length;
                }

                //Upload and handle progress
                var requestStream = request.GetRequestStream();
                var total         = body.Length;
                body.Seek(0, SeekOrigin.Begin);
                body.CopyTo(requestStream, 4096, bytes => progress?.Report(bytes * 1.0 / total));
                body.Close();
                requestStream.Close();
            }

            return(request);
        }
Exemplo n.º 4
0
        public IHttpResponse GetResponse(IHttpRequest request, Interfaces.Infrastructure.IProgress <double> progress)
        {
            try
            {
                var realRequest = CreateRequest(request, progress);
#if DEBUG
                var time1 = DateTime.Now;
#endif
                var response = GenerateResponse(realRequest.GetResponse() as HttpWebResponse);
#if DEBUG
                var time2 = DateTime.Now;
                Debug(
                    $"[{(time2 - time1).TotalMilliseconds} ms]-[{request.GetMethod()}] {request.GetUri()} {Environment.NewLine} {response.GetResponseStream().AsString()}");
#endif
                return(response);
            }
            catch (WebException e)
            {
                Error(e.Response.GetResponseStream().AsString());
                throw;
            }
        }
 public IHttpResponse GetResponse(IHttpRequest request, Interfaces.Infrastructure.IProgress <double> progress = null)
 {
     #if DEBUG
     var time1 = DateTime.Now;
     #endif
     var requestMessage = new HttpRequestMessage(HttpMethod.Get, request.GetUri())
     {
         Content = new StreamContent(request.GetBody())
     };
     requestMessage.Headers.Clear();
     requestMessage.Content.Headers.Clear();
     request.GetHeaders().Where(header => !header.Key.StartsWith("Content")).ToList()
     .ForEach(header => requestMessage.Headers.Add(header.Key, header.Value));
     request.GetHeaders().Where(header => header.Key.StartsWith("Content")).ToList()
     .ForEach(header => requestMessage.Content.Headers.Add(header.Key, header.Value));
     var responseMessage = Client.SendAsync(requestMessage).Result;
     var response        = new GetWithPayloadHttpResponse(responseMessage);
     #if DEBUG
     var time2 = DateTime.Now;
     Debug(
         $"[{(time2 - time1).TotalMilliseconds} ms]-[{request.GetMethod()}] {request.GetUri()} {Environment.NewLine} {response.GetResponseStream().AsString()}");
     #endif
     return(response);
 }
Exemplo n.º 6
0
 public IHttpResponse GetResponse(IHttpRequest request, Interfaces.Infrastructure.IProgress <double> progress)
 {
     return(AvailableClients.Value.FirstOrDefault(client => client.CanGetResponse(request))?.GetResponse(request, progress));
 }
Exemplo n.º 7
0
 /// <summary>
 ///     Send an http request using the prebuilt <see cref="IRequestBuilder{T}" /> to build a request from the
 ///     <typeparamref name="TParameter" />
 /// </summary>
 /// <typeparam name="TParameter"></typeparam>
 /// <param name="parameter"></param>
 /// <param name="progress"></param>
 /// <returns></returns>
 protected async Task SendAsync <TParameter>(TParameter parameter, Interfaces.Infrastructure.IProgress <double> progress = null)
     where TParameter : HttpParameter
 {
     await TaskBuilder.Run(async() => Client.GetResponse(await CreateHttpRequest(parameter), progress)).ConfigureAwait(false);
 }
Exemplo n.º 8
0
 /// <summary>
 ///     Send an http request without caring about the response
 /// </summary>
 /// <param name="request">The http request</param>
 /// <param name="progress">The progress reporter</param>
 /// <returns>The task used to wait</returns>
 protected async Task SendAsync(HttpRequest request, Interfaces.Infrastructure.IProgress <double> progress = null)
 {
     await TaskBuilder.Run(() => Client.GetResponse(request, progress)).ConfigureAwait(false);
 }
Exemplo n.º 9
0
 /// <summary>
 ///     Send an http request and wait to fetch some data from the response
 /// </summary>
 /// <typeparam name="T">The type of the data</typeparam>
 /// <param name="request">The http request</param>
 /// <param name="progress">The progress handler</param>
 /// <returns>The data returned from the server</returns>
 protected async Task <T> FetchAsync <T>(HttpRequest request, Interfaces.Infrastructure.IProgress <double> progress = null)
 {
     return(await TaskBuilder.Run(() => ResponseResolver.Resolve <T>(Client.GetResponse(request, progress))).ConfigureAwait(false));
 }