add customizable accept header to http client interface

pull/702/head
Luke Pulverenti 11 years ago
parent 163a1bdbcb
commit 87598ca6d0

@ -107,14 +107,13 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
/// <summary> /// <summary>
/// Performs a GET request and returns the resulting stream /// Performs a GET request and returns the resulting stream
/// </summary> /// </summary>
/// <param name="url">The URL.</param> /// <param name="options">The options.</param>
/// <param name="resourcePool">The resource pool.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Stream}.</returns> /// <returns>Task{Stream}.</returns>
/// <exception cref="HttpException"></exception>
/// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception>
public async Task<Stream> Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken) public async Task<Stream> Get(HttpRequestOptions options)
{ {
ValidateParams(url, cancellationToken); ValidateParams(options.Url, options.CancellationToken);
//var urlHash = url.GetMD5().ToString(); //var urlHash = url.GetMD5().ToString();
//var infoPath = _cacheRepository.GetResourcePath(urlHash + ".js"); //var infoPath = _cacheRepository.GetResourcePath(urlHash + ".js");
@ -136,9 +135,9 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
// return GetCachedResponse(responsePath); // return GetCachedResponse(responsePath);
//} //}
cancellationToken.ThrowIfCancellationRequested(); options.CancellationToken.ThrowIfCancellationRequested();
var message = new HttpRequestMessage(HttpMethod.Get, url); var message = GetHttpRequestMessage(options);
//if (cachedInfo != null) //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 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); EnsureSuccessStatusCode(response);
cancellationToken.ThrowIfCancellationRequested(); options.CancellationToken.ThrowIfCancellationRequested();
//cachedInfo = UpdateInfoCache(cachedInfo, url, infoPath, response); //cachedInfo = UpdateInfoCache(cachedInfo, url, infoPath, response);
@ -187,29 +186,58 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
} }
catch (OperationCanceledException ex) catch (OperationCanceledException ex)
{ {
throw GetCancellationException(url, cancellationToken, ex); throw GetCancellationException(options.Url, options.CancellationToken, ex);
} }
catch (HttpRequestException 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); throw new HttpException(ex.Message, ex);
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.ErrorException("Error getting response from " + url, ex); _logger.ErrorException("Error getting response from " + options.Url, ex);
throw; throw;
} }
finally finally
{ {
if (resourcePool != null) if (options.ResourcePool != null)
{ {
resourcePool.Release(); options.ResourcePool.Release();
} }
} }
} }
/// <summary>
/// Performs a GET request and returns the resulting stream
/// </summary>
/// <param name="url">The URL.</param>
/// <param name="resourcePool">The resource pool.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Stream}.</returns>
public Task<Stream> Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken)
{
return Get(new HttpRequestOptions
{
Url = url,
ResourcePool = resourcePool,
CancellationToken = cancellationToken,
});
}
/// <summary>
/// Gets the specified URL.
/// </summary>
/// <param name="url">The URL.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Stream}.</returns>
public Task<Stream> Get(string url, CancellationToken cancellationToken)
{
return Get(url, null, cancellationToken);
}
/// <summary> /// <summary>
/// Gets the cached response. /// Gets the cached response.
/// </summary> /// </summary>
@ -393,13 +421,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
options.CancellationToken.ThrowIfCancellationRequested(); 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) if (options.ResourcePool != null)
{ {
await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false); await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false);
@ -413,7 +434,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
{ {
options.CancellationToken.ThrowIfCancellationRequested(); 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); EnsureSuccessStatusCode(response);
@ -463,6 +484,28 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
return tempFile; return tempFile;
} }
/// <summary>
/// Gets the message.
/// </summary>
/// <param name="options">The options.</param>
/// <returns>HttpResponseMessage.</returns>
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;
}
/// <summary> /// <summary>
/// Gets the length of the content. /// Gets the length of the content.
/// </summary> /// </summary>
@ -616,17 +659,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
} }
} }
/// <summary>
/// Gets the specified URL.
/// </summary>
/// <param name="url">The URL.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Stream}.</returns>
public Task<Stream> Get(string url, CancellationToken cancellationToken)
{
return Get(url, null, cancellationToken);
}
/// <summary> /// <summary>
/// Posts the specified URL. /// Posts the specified URL.
/// </summary> /// </summary>

@ -14,6 +14,12 @@ namespace MediaBrowser.Common.Net
/// <value>The URL.</value> /// <value>The URL.</value>
public string Url { get; set; } public string Url { get; set; }
/// <summary>
/// Gets or sets the accept header.
/// </summary>
/// <value>The accept header.</value>
public string AcceptHeader { get; set; }
/// <summary> /// <summary>
/// Gets or sets the cancellation token. /// Gets or sets the cancellation token.
/// </summary> /// </summary>

@ -28,7 +28,14 @@ namespace MediaBrowser.Common.Net
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Stream}.</returns> /// <returns>Task{Stream}.</returns>
Task<Stream> Get(string url, CancellationToken cancellationToken); Task<Stream> Get(string url, CancellationToken cancellationToken);
/// <summary>
/// Gets the specified options.
/// </summary>
/// <param name="options">The options.</param>
/// <returns>Task{Stream}.</returns>
Task<Stream> Get(HttpRequestOptions options);
/// <summary> /// <summary>
/// Performs a POST request /// Performs a POST request
/// </summary> /// </summary>

Loading…
Cancel
Save