|
@@ -310,38 +310,28 @@ namespace Emby.Server.Implementations.HttpClientManager
|
|
|
|| !string.IsNullOrEmpty(options.RequestContent)
|
|
|
|| httpMethod == HttpMethod.Post)
|
|
|
{
|
|
|
- try
|
|
|
- {
|
|
|
- if (options.RequestContentBytes != null)
|
|
|
- {
|
|
|
- httpWebRequest.Content = new ByteArrayContent(options.RequestContentBytes);
|
|
|
- }
|
|
|
- else if (options.RequestContent != null)
|
|
|
- {
|
|
|
- httpWebRequest.Content = new StringContent(options.RequestContent);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- httpWebRequest.Content = new ByteArrayContent(Array.Empty<byte>());
|
|
|
- }
|
|
|
- /*
|
|
|
- var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded";
|
|
|
-
|
|
|
- if (options.AppendCharsetToMimeType)
|
|
|
- {
|
|
|
- contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\"";
|
|
|
- }
|
|
|
|
|
|
- httpWebRequest.Headers.Add(HeaderNames.ContentType, contentType);*/
|
|
|
- using (var response = await client.SendAsync(httpWebRequest).ConfigureAwait(false))
|
|
|
- {
|
|
|
- return await HandleResponseAsync(response, options).ConfigureAwait(false);
|
|
|
- }
|
|
|
+ if (options.RequestContentBytes != null)
|
|
|
+ {
|
|
|
+ httpWebRequest.Content = new ByteArrayContent(options.RequestContentBytes);
|
|
|
+ }
|
|
|
+ else if (options.RequestContent != null)
|
|
|
+ {
|
|
|
+ httpWebRequest.Content = new StringContent(options.RequestContent);
|
|
|
}
|
|
|
- catch (Exception ex)
|
|
|
+ else
|
|
|
+ {
|
|
|
+ httpWebRequest.Content = new ByteArrayContent(Array.Empty<byte>());
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded";
|
|
|
+
|
|
|
+ if (options.AppendCharsetToMimeType)
|
|
|
{
|
|
|
- throw new HttpException(ex.Message) { IsTimedOut = true };
|
|
|
+ contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\"";
|
|
|
}
|
|
|
+
|
|
|
+ httpWebRequest.Headers.Add(HeaderNames.ContentType, contentType);*/
|
|
|
}
|
|
|
|
|
|
if (options.LogRequest)
|
|
@@ -349,54 +339,42 @@ namespace Emby.Server.Implementations.HttpClientManager
|
|
|
_logger.LogDebug("HttpClientManager {0}: {1}", httpMethod.ToString(), options.Url);
|
|
|
}
|
|
|
|
|
|
- try
|
|
|
- {
|
|
|
- options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
+ options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
|
|
|
- /*if (!options.BufferContent)
|
|
|
- {
|
|
|
- var response = await client.HttpClient.SendAsync(httpWebRequest).ConfigureAwait(false);
|
|
|
+ /*if (!options.BufferContent)
|
|
|
+ {
|
|
|
+ var response = await client.HttpClient.SendAsync(httpWebRequest).ConfigureAwait(false);
|
|
|
|
|
|
- await EnsureSuccessStatusCode(client, response, options).ConfigureAwait(false);
|
|
|
+ await EnsureSuccessStatusCode(client, response, options).ConfigureAwait(false);
|
|
|
|
|
|
- options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
+ options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
|
|
|
- return GetResponseInfo(response, await response.Content.ReadAsStreamAsync().ConfigureAwait(false), response.Content.Headers.ContentLength, response);
|
|
|
- }*/
|
|
|
+ return GetResponseInfo(response, await response.Content.ReadAsStreamAsync().ConfigureAwait(false), response.Content.Headers.ContentLength, response);
|
|
|
+ }*/
|
|
|
|
|
|
- using (var response = await client.SendAsync(httpWebRequest).ConfigureAwait(false))
|
|
|
- {
|
|
|
- return await HandleResponseAsync(response, options).ConfigureAwait(false);
|
|
|
- }
|
|
|
- }
|
|
|
- catch (OperationCanceledException ex)
|
|
|
+ using (var response = await client.SendAsync(httpWebRequest, options.CancellationToken).ConfigureAwait(false))
|
|
|
{
|
|
|
- throw GetCancellationException(options, options.CancellationToken, ex);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private async Task<HttpResponseInfo> HandleResponseAsync(HttpResponseMessage response, HttpRequestOptions options)
|
|
|
- {
|
|
|
- await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
|
|
-
|
|
|
- options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
+ await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
|
|
|
|
|
- using (var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
|
|
|
- {
|
|
|
- var memoryStream = new MemoryStream();
|
|
|
- await stream.CopyToAsync(memoryStream, 81920, options.CancellationToken).ConfigureAwait(false);
|
|
|
- memoryStream.Position = 0;
|
|
|
+ options.CancellationToken.ThrowIfCancellationRequested();
|
|
|
|
|
|
- var responseInfo = new HttpResponseInfo(response.Headers)
|
|
|
+ using (var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
|
|
|
{
|
|
|
- Content = memoryStream,
|
|
|
- StatusCode = response.StatusCode,
|
|
|
- ContentType = response.Content.Headers.ContentType?.MediaType,
|
|
|
- ContentLength = memoryStream.Length,
|
|
|
- ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
|
|
|
- };
|
|
|
+ var memoryStream = new MemoryStream();
|
|
|
+ await stream.CopyToAsync(memoryStream, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false);
|
|
|
+ memoryStream.Position = 0;
|
|
|
|
|
|
- return responseInfo;
|
|
|
+ var responseInfo = new HttpResponseInfo(response.Headers)
|
|
|
+ {
|
|
|
+ Content = memoryStream,
|
|
|
+ StatusCode = response.StatusCode,
|
|
|
+ ContentType = response.Content.Headers.ContentType?.MediaType,
|
|
|
+ ContentLength = memoryStream.Length,
|
|
|
+ ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
|
|
|
+ };
|
|
|
+
|
|
|
+ return responseInfo;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -603,7 +581,7 @@ namespace Emby.Server.Implementations.HttpClientManager
|
|
|
}
|
|
|
|
|
|
var msg = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
|
|
- _logger.LogError(msg);
|
|
|
+ _logger.LogError("HTTP request failed with message: {Message}", msg);
|
|
|
|
|
|
throw new HttpException(response.ReasonPhrase)
|
|
|
{
|