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; } }
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(); } }
[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); }
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; } }
/// <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); } }
public AlbumProgressForm(string url) { InitializeComponent(); request = new HttpGetRequest(url, new HttpRequestHandler(OnRequestStatusChange)); }