diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
index dd02bdc092..87922f60a3 100644
--- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
+++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
@@ -107,14 +107,13 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
///
/// Performs a GET request and returns the resulting stream
///
- /// The URL.
- /// The resource pool.
- /// The cancellation token.
+ /// The options.
/// Task{Stream}.
+ ///
///
- public async Task Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken)
+ public async Task Get(HttpRequestOptions options)
{
- ValidateParams(url, cancellationToken);
+ ValidateParams(options.Url, options.CancellationToken);
//var urlHash = url.GetMD5().ToString();
//var infoPath = _cacheRepository.GetResourcePath(urlHash + ".js");
@@ -136,9 +135,9 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
// return GetCachedResponse(responsePath);
//}
- cancellationToken.ThrowIfCancellationRequested();
+ options.CancellationToken.ThrowIfCancellationRequested();
- var message = new HttpRequestMessage(HttpMethod.Get, url);
+ var message = GetHttpRequestMessage(options);
//if (cachedInfo != null)
//{
@@ -152,22 +151,22 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
// }
//}
- if (resourcePool != null)
+ if (options.ResourcePool != null)
{
- await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
+ await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false);
}
- _logger.Info("HttpClientManager.Get url: {0}", url);
+ _logger.Info("HttpClientManager.Get url: {0}", options.Url);
try
{
- cancellationToken.ThrowIfCancellationRequested();
+ options.CancellationToken.ThrowIfCancellationRequested();
- var response = await GetHttpClient(GetHostFromUrl(url)).SendAsync(message, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
+ var response = await GetHttpClient(GetHostFromUrl(options.Url)).SendAsync(message, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false);
EnsureSuccessStatusCode(response);
- cancellationToken.ThrowIfCancellationRequested();
+ options.CancellationToken.ThrowIfCancellationRequested();
//cachedInfo = UpdateInfoCache(cachedInfo, url, infoPath, response);
@@ -187,29 +186,58 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
}
catch (OperationCanceledException ex)
{
- throw GetCancellationException(url, cancellationToken, ex);
+ throw GetCancellationException(options.Url, options.CancellationToken, ex);
}
catch (HttpRequestException ex)
{
- _logger.ErrorException("Error getting response from " + url, ex);
+ _logger.ErrorException("Error getting response from " + options.Url, ex);
throw new HttpException(ex.Message, ex);
}
catch (Exception ex)
{
- _logger.ErrorException("Error getting response from " + url, ex);
+ _logger.ErrorException("Error getting response from " + options.Url, ex);
throw;
}
finally
{
- if (resourcePool != null)
+ if (options.ResourcePool != null)
{
- resourcePool.Release();
+ options.ResourcePool.Release();
}
}
}
+ ///
+ /// Performs a GET request and returns the resulting stream
+ ///
+ /// The URL.
+ /// The resource pool.
+ /// The cancellation token.
+ /// Task{Stream}.
+ public Task Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken)
+ {
+ return Get(new HttpRequestOptions
+ {
+ Url = url,
+ ResourcePool = resourcePool,
+ CancellationToken = cancellationToken,
+ });
+ }
+
+ ///
+ /// Gets the specified URL.
+ ///
+ /// The URL.
+ /// The cancellation token.
+ /// Task{Stream}.
+ public Task Get(string url, CancellationToken cancellationToken)
+ {
+ return Get(url, null, cancellationToken);
+ }
+
+
///
/// Gets the cached response.
///
@@ -393,13 +421,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
options.CancellationToken.ThrowIfCancellationRequested();
- var message = new HttpRequestMessage(HttpMethod.Get, options.Url);
-
- if (!string.IsNullOrEmpty(options.UserAgent))
- {
- message.Headers.Add("User-Agent", options.UserAgent);
- }
-
if (options.ResourcePool != null)
{
await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false);
@@ -413,7 +434,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
{
options.CancellationToken.ThrowIfCancellationRequested();
- using (var response = await GetHttpClient(GetHostFromUrl(options.Url)).SendAsync(message, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false))
+ using (var response = await GetHttpClient(GetHostFromUrl(options.Url)).SendAsync(GetHttpRequestMessage(options), HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false))
{
EnsureSuccessStatusCode(response);
@@ -463,6 +484,28 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
return tempFile;
}
+ ///
+ /// Gets the message.
+ ///
+ /// The options.
+ /// HttpResponseMessage.
+ private HttpRequestMessage GetHttpRequestMessage(HttpRequestOptions options)
+ {
+ var message = new HttpRequestMessage(HttpMethod.Get, options.Url);
+
+ if (!string.IsNullOrEmpty(options.UserAgent))
+ {
+ message.Headers.Add("User-Agent", options.UserAgent);
+ }
+
+ if (!string.IsNullOrEmpty(options.AcceptHeader))
+ {
+ message.Headers.Add("Accept", options.AcceptHeader);
+ }
+
+ return message;
+ }
+
///
/// Gets the length of the content.
///
@@ -616,17 +659,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
}
}
- ///
- /// Gets the specified URL.
- ///
- /// The URL.
- /// The cancellation token.
- /// Task{Stream}.
- public Task Get(string url, CancellationToken cancellationToken)
- {
- return Get(url, null, cancellationToken);
- }
-
///
/// Posts the specified URL.
///
diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs
index 98d02a9f99..77cb8b3df1 100644
--- a/MediaBrowser.Common/Net/HttpRequestOptions.cs
+++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs
@@ -14,6 +14,12 @@ namespace MediaBrowser.Common.Net
/// The URL.
public string Url { get; set; }
+ ///
+ /// Gets or sets the accept header.
+ ///
+ /// The accept header.
+ public string AcceptHeader { get; set; }
+
///
/// Gets or sets the cancellation token.
///
diff --git a/MediaBrowser.Common/Net/IHttpClient.cs b/MediaBrowser.Common/Net/IHttpClient.cs
index 87f9b5d712..2998d1af9b 100644
--- a/MediaBrowser.Common/Net/IHttpClient.cs
+++ b/MediaBrowser.Common/Net/IHttpClient.cs
@@ -28,7 +28,14 @@ namespace MediaBrowser.Common.Net
/// The cancellation token.
/// Task{Stream}.
Task Get(string url, CancellationToken cancellationToken);
-
+
+ ///
+ /// Gets the specified options.
+ ///
+ /// The options.
+ /// Task{Stream}.
+ Task Get(HttpRequestOptions options);
+
///
/// Performs a POST request
///