Ejemplo n.º 1
0
        public IHttpResponse Get(HttpGetRequest getRequest)
        {
            try
            {
                _logger.LogDebug("Sending GET request to " + getRequest.Address);

                if (getRequest.Range != null)
                {
                    throw new NotImplementedException();
                }

                _logger.LogTrace("timeout  = " + getRequest.Timeout);

                var result = new WWWResult();

                var waitHandle = UnityDispatcher.InvokeCoroutine(GetWWW(getRequest, result));

                waitHandle.WaitOne(TimeSpan.FromMilliseconds(getRequest.Timeout));

                lock (result)
                {
                    if (!result.IsDone)
                    {
                        throw new WebException("Timeout.", WebExceptionStatus.Timeout);
                    }

                    var statusCode = ReadStatusCode(result);

                    _logger.LogDebug("Successfuly received response.");
                    return(new UnityHttpResponse(result.Text, statusCode, ResponseEncoding));
                }
            }
            catch (Exception e)
            {
                _logger.LogError("Failed to get response.", e);
                throw;
            }
        }
Ejemplo n.º 2
0
        private IHttpResponse MakeResponse(Uri uri, Request request)
        {
            switch (request.Method)
            {
            case RequestMethod.Get:
            {
                var httpRequest = new HttpGetRequest
                {
                    Address = uri,
                    Timeout = RequestTimeoutCalculator.Timeout
                };

                Logger.LogTrace(
                    string.Format("timeout = {0}ms", httpRequest.Timeout));

                return(HttpClient.Get(httpRequest));
            }

            case RequestMethod.Post:
            {
                var httpRequest = new HttpPostRequest
                {
                    Address  = uri,
                    Timeout  = RequestTimeoutCalculator.Timeout,
                    FormData = request.Body
                };

                Logger.LogTrace(
                    string.Format("timeout = {0}ms", httpRequest.Timeout));

                return(HttpClient.Post(httpRequest));
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Ejemplo n.º 3
0
        [DataRow("H74AIvjDifo")] // vevo
        //[DataRow("rSy0JtBCZMQ")] // different problem => missing URL key
        public async Task When_loading_video_then_uri_should_be_available_accessible(string youTubeId)
        {
            //// Act
            Debug.WriteLine(youTubeId);
            var uri = await YouTube.GetVideoUriAsync(youTubeId, YouTubeQuality.Quality360P, YouTubeQuality.Quality2160P);

            try
            {
                var request = new HttpGetRequest(uri.Uri);
                request.Timeout = TimeSpan.FromSeconds(1);

                var cancellationToken = new CancellationTokenSource(new TimeSpan(0, 0, 2));
                await Http.GetAsync(uri.Uri, cancellationToken.Token);
            }
            catch (OperationCanceledException exception)
            {
                Assert.IsNotNull(exception);
            }

            //// Assert
            Assert.IsNotNull(uri);
            Assert.IsTrue(uri.HasAudio);
            Assert.IsTrue(uri.HasVideo);
        }
Ejemplo n.º 4
0
        public void Download(CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogDebug("Downloading...");
                _logger.LogTrace("url = " + _url);
                _logger.LogTrace("bufferSize = " + BufferSize);
                _logger.LogTrace("bytesRange = " + (_bytesRange.HasValue
                                     ? _bytesRange.Value.Start + "-" + _bytesRange.Value.End
                                     : "(none)"));
                _logger.LogTrace("timeout = " + _timeout);

                Assert.MethodCalledOnlyOnce(ref _downloadHasBeenCalled, "Download");

                var request = new HttpGetRequest
                {
                    Address          = new Uri(_url),
                    Range            = _bytesRange,
                    Timeout          = _timeout,
                    ReadWriteTimeout = _timeout,
                };

                using (var response = _httpClient.Get(request))
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    _logger.LogDebug("Received response from server.");
                    _logger.LogTrace("statusCode = " + response.StatusCode);

                    if (Is2XXStatus(response.StatusCode))
                    {
                        _logger.LogDebug("Successful response. Reading response stream...");

                        //TODO: Could response.ContentStream be null? Need to check it.

                        ReadResponseStream(response.ContentStream, cancellationToken);

                        _logger.LogDebug("Stream has been read.");
                    }
                    else if (Is4XXStatus(response.StatusCode))
                    {
                        throw new DataNotAvailableException(string.Format(
                                                                "Request data for {0} is not available (status: {1})", _url, response.StatusCode));
                    }
                    else
                    {
                        throw new ServerErrorException(string.Format(
                                                           "Server has experienced some issues with request for {0} which resulted in {1} status code.",
                                                           _url, response.StatusCode));
                    }
                }

                _logger.LogDebug("Downloading finished.");
            }
            catch (WebException webException)
            {
                _logger.LogError("Downloading has failed.", webException);
                throw new ConnectionFailureException(
                          string.Format("Connection to server has failed while requesting {0}", _url), webException);
            }
            catch (Exception e)
            {
                _logger.LogError("Downloading has failed.", e);
                throw;
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Sends a HTTP GET message and returns the non parsed HttpResponse recieved for it.
 /// </summary>
 /// <param name="request">The HTTP request's parameters.</param>
 /// <param name="cancellationToken">A CancellationToken that can be used to cancel this operation.</param>
 /// <returns>The non-parsed HttpResponse.</returns>
 public Task <HttpResponse> SendGetRequestAsync(HttpGetRequest request, CancellationToken cancellationToken = default)
 => SendRequestCoreAsync(request, cancellationToken);
        private bool TryGetResponse(ApiConnectionServer server, Request request, ServerType serverType,
                                    out IApiResponse response)
        {
            Logger.LogDebug(
                string.Format("Trying to get response from server ({0}): '{1}:{2}' (uses HTTPS: {3})...",
                              serverType,
                              server.Host,
                              server.RealPort,
                              server.UseHttps));

            response = null;

            List <Exception> exceptionsList;

            switch (serverType)
            {
            case ServerType.MainServer:
                exceptionsList = request.MainServerExceptions;
                break;

            case ServerType.CacheServer:
                exceptionsList = request.CacheServersExceptions;
                break;

            default:
                throw new ArgumentOutOfRangeException("serverType", serverType, null);
            }

            try
            {
                var uri = new UriBuilder
                {
                    Scheme = server.UseHttps ? "https" : "http",
                    Host   = server.Host,
                    Path   = request.Path,
                    Query  = request.Query,
                    Port   = server.RealPort
                }.Uri;

                var httpRequest = new HttpGetRequest
                {
                    Address = uri,
                    Timeout = RequestTimeoutCalculator.Timeout
                };

                Logger.LogTrace("timeout = " + httpRequest.Timeout + "ms");

                var httpResponse = HttpClient.Get(httpRequest);

                Logger.LogDebug("Received response. Checking whether it is valid...");
                Logger.LogTrace("Response status code: " + httpResponse.StatusCode);

                if (IsResponseValid(httpResponse, serverType))
                {
                    Logger.LogDebug("Response is valid.");
                    response = new ApiResponse(httpResponse);
                    return(true);
                }

                Logger.LogWarning("Response is not valid.");

                if (IsResponseUnexpectedError(httpResponse, serverType))
                {
                    throw new ApiResponseException((int)httpResponse.StatusCode);
                }

                throw new ApiServerConnectionException(
                          "Server \'" + server.Host + "\' returned code " + (int)httpResponse.StatusCode);
            }
            catch (WebException webException)
            {
                Logger.LogWarning("Error while connecting to the API server.", webException);
                exceptionsList.Add(webException);
                return(false);
            }
            catch (ApiServerConnectionException e)
            {
                Logger.LogWarning("Error while connecting to the API server.", e);
                exceptionsList.Add(e);
                return(false);
            }
        }
Ejemplo n.º 7
0
 public AlbumProgressForm(string url)
 {
     InitializeComponent();
     request = new HttpGetRequest(url, new HttpRequestHandler(OnRequestStatusChange));
 }