public bool ShouldProxyBeBypassed(HttpProxySettings proxySettings, HttpUri url) { //We are utilising the WebProxy implementation here to save us having to reimplement it. This way we use Microsofts implementation var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray); return proxy.IsBypassed((Uri)url); }
public HttpRequestBuilder(string baseUrl) { BaseUrl = new HttpUri(baseUrl); ResourceUrl = string.Empty; Method = HttpMethod.GET; QueryParams = new List<KeyValuePair<string, string>>(); SuffixQueryParams = new List<KeyValuePair<string, string>>(); Segments = new Dictionary<string, string>(); Headers = new HttpHeader(); Cookies = new Dictionary<string, string>(); FormData = new List<HttpFormData>(); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteEpisode.Release.DownloadProtocol); return; } // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) { var url = new HttpUri(remoteEpisode.Release.DownloadUrl); _rateLimitService.WaitAndPulse(url.Host, TimeSpan.FromSeconds(2)); } string downloadClientId; try { downloadClientId = downloadClient.Download(remoteEpisode); _indexerStatusService.RecordSuccess(remoteEpisode.Release.IndexerId); } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId); } throw; } var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public HttpRequest(string url, HttpAccept httpAccept = null) { Url = new HttpUri(url); Headers = new HttpHeader(); AllowAutoRedirect = true; Cookies = new Dictionary<string, string>(); if (!RuntimeInfoBase.IsProduction) { AllowAutoRedirect = false; } if (httpAccept != null) { Headers.Accept = httpAccept.Value; } }
public void should_combine_uri(string basePath, string relativePath, string expected) { var newUri = new HttpUri(basePath) + new HttpUri(relativePath); newUri.FullUri.Should().Be(expected); }
protected virtual HttpUri CreateUri() { var url = BaseUrl.CombinePath(ResourceUrl).AddQueryParams(QueryParams.Concat(SuffixQueryParams)); if (Segments.Any()) { var fullUri = url.FullUri; foreach (var segment in Segments) { fullUri = fullUri.Replace(segment.Key, segment.Value); } url = new HttpUri(fullUri); } return url; }
private string GetInfoUrl(string torrentId) { var url = new HttpUri(_settings.BaseUrl) .CombinePath("/details.php") .AddQueryParam("id", torrentId); return url.FullUri; }
private string GetDownloadUrl(string torrentId) { var url = new HttpUri(_settings.BaseUrl) .CombinePath("/download.php") .AddQueryParam("id", torrentId) .AddQueryParam("passkey", _settings.ApiKey); return url.FullUri; }
public void DownloadReport(RemoteBook remoteBook) { Ensure.That(remoteBook.Author, () => remoteBook.Author).IsNotNull(); Ensure.That(remoteBook.Books, () => remoteBook.Books).HasItems(); var downloadTitle = remoteBook.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteBook.Release.DownloadProtocol); if (downloadClient == null) { throw new DownloadClientUnavailableException($"{remoteBook.Release.DownloadProtocol} Download client isn't configured yet"); } // Get the seed configuration for this release. remoteBook.SeedConfiguration = _seedConfigProvider.GetSeedConfiguration(remoteBook); // Limit grabs to 2 per second. if (remoteBook.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteBook.Release.DownloadUrl.StartsWith("magnet:")) { var url = new HttpUri(remoteBook.Release.DownloadUrl); _rateLimitService.WaitAndPulse(url.Host, TimeSpan.FromSeconds(2)); } string downloadClientId; try { downloadClientId = downloadClient.Download(remoteBook); _downloadClientStatusService.RecordSuccess(downloadClient.Definition.Id); _indexerStatusService.RecordSuccess(remoteBook.Release.IndexerId); } catch (ReleaseUnavailableException) { _logger.Trace("Release {0} no longer available on indexer.", remoteBook); throw; } catch (DownloadClientRejectedReleaseException) { _logger.Trace("Release {0} rejected by download client, possible duplicate.", remoteBook); throw; } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteBook.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteBook.Release.IndexerId); } throw; } var bookGrabbedEvent = new BookGrabbedEvent(remoteBook); bookGrabbedEvent.DownloadClient = downloadClient.Name; bookGrabbedEvent.DownloadClientId = downloadClient.Definition.Id; bookGrabbedEvent.DownloadClientName = downloadClient.Definition.Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { bookGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(bookGrabbedEvent); }