mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 14:34:23 +01:00
Fix warnings
This commit is contained in:
@@ -10,104 +10,59 @@ namespace BTCPayServer.Services.Rates
|
||||
{
|
||||
internal class HttpClientRequestMaker : IAPIRequestMaker
|
||||
{
|
||||
class InternalHttpWebRequest : IHttpWebRequest
|
||||
#nullable enable
|
||||
internal class InternalHttpWebRequest : IHttpWebRequest
|
||||
{
|
||||
internal readonly HttpWebRequest Request;
|
||||
internal readonly HttpRequestMessage Request;
|
||||
internal HttpResponseMessage? Response;
|
||||
private string? contentType;
|
||||
|
||||
public Uri RequestUri => Request.RequestUri;
|
||||
|
||||
public string Method
|
||||
public InternalHttpWebRequest(string method, Uri fullUri)
|
||||
{
|
||||
get
|
||||
{
|
||||
return Request.Method;
|
||||
}
|
||||
set
|
||||
{
|
||||
Request.Method = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int Timeout
|
||||
{
|
||||
get
|
||||
{
|
||||
return Request.Timeout;
|
||||
}
|
||||
set
|
||||
{
|
||||
Request.Timeout = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int ReadWriteTimeout
|
||||
{
|
||||
get
|
||||
{
|
||||
return Request.ReadWriteTimeout;
|
||||
}
|
||||
set
|
||||
{
|
||||
Request.ReadWriteTimeout = value;
|
||||
}
|
||||
}
|
||||
|
||||
public InternalHttpWebRequest(Uri fullUri)
|
||||
{
|
||||
Request = ((WebRequest.Create(fullUri) as HttpWebRequest) ?? throw new NullReferenceException("Failed to create HttpWebRequest"));
|
||||
Request.KeepAlive = false;
|
||||
Request = new HttpRequestMessage(new HttpMethod(method), fullUri);
|
||||
}
|
||||
|
||||
public void AddHeader(string header, string value)
|
||||
{
|
||||
switch (header.ToStringLowerInvariant())
|
||||
switch (header.ToLowerInvariant())
|
||||
{
|
||||
case "content-type":
|
||||
Request.ContentType = value;
|
||||
break;
|
||||
case "content-length":
|
||||
Request.ContentLength = value.ConvertInvariant<long>(0L);
|
||||
break;
|
||||
case "user-agent":
|
||||
Request.UserAgent = value;
|
||||
break;
|
||||
case "accept":
|
||||
Request.Accept = value;
|
||||
break;
|
||||
case "connection":
|
||||
Request.Connection = value;
|
||||
contentType = value;
|
||||
break;
|
||||
default:
|
||||
Request.Headers[header] = value;
|
||||
Request.Headers.TryAddWithoutValidation(header, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public Uri RequestUri
|
||||
{
|
||||
get { return Request.RequestUri!; }
|
||||
}
|
||||
|
||||
public string Method
|
||||
{
|
||||
get { return Request.Method.Method; }
|
||||
set { Request.Method = new HttpMethod(value); }
|
||||
}
|
||||
|
||||
public int Timeout { get; set; }
|
||||
|
||||
public int ReadWriteTimeout
|
||||
{
|
||||
get => Timeout;
|
||||
set => Timeout = value;
|
||||
}
|
||||
|
||||
|
||||
public Task WriteAllAsync(byte[] data, int index, int length)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public HttpRequestMessage ToHttpRequestMessage()
|
||||
{
|
||||
var httpRequest = new HttpRequestMessage(HttpMethod.Get, Request.RequestUri);
|
||||
CopyHeadersFrom(httpRequest, Request);
|
||||
return httpRequest;
|
||||
}
|
||||
|
||||
internal void CopyHeadersFrom(HttpRequestMessage message, HttpWebRequest request)
|
||||
{
|
||||
foreach (string headerName in request.Headers)
|
||||
{
|
||||
string[] headerValues = request.Headers.GetValues(headerName);
|
||||
if (!message.Headers.TryAddWithoutValidation(headerName, headerValues))
|
||||
{
|
||||
if (message.Content != null)
|
||||
message.Content.Headers.TryAddWithoutValidation(headerName, headerValues);
|
||||
}
|
||||
}
|
||||
Request.Content = new ByteArrayContent(data, index, length);
|
||||
Request.Content.Headers.Add("content-type", contentType);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
#nullable restore
|
||||
class InternalHttpWebResponse : IHttpWebResponse
|
||||
{
|
||||
public InternalHttpWebResponse(HttpResponseMessage httpResponseMessage)
|
||||
@@ -164,44 +119,61 @@ namespace BTCPayServer.Services.Rates
|
||||
{
|
||||
url = "/" + url;
|
||||
}
|
||||
string uri2 = (baseUrl ?? api.BaseUrl) + url;
|
||||
if (method == null)
|
||||
{
|
||||
method = api.RequestMethod;
|
||||
}
|
||||
Uri uri = api.ProcessRequestUrl(new UriBuilder(uri2), payload, method);
|
||||
InternalHttpWebRequest request = new InternalHttpWebRequest(uri)
|
||||
{
|
||||
Method = method
|
||||
};
|
||||
|
||||
// prepare the request
|
||||
string fullUrl = (baseUrl ?? api.BaseUrl) + url;
|
||||
method ??= api.RequestMethod;
|
||||
Uri uri = api.ProcessRequestUrl(new UriBuilder(fullUrl), payload, method);
|
||||
InternalHttpWebRequest request = new InternalHttpWebRequest(method, uri);
|
||||
request.AddHeader("accept-language", "en-US,en;q=0.5");
|
||||
request.AddHeader("content-type", api.RequestContentType);
|
||||
request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36");
|
||||
int num3 = request.Timeout = (request.ReadWriteTimeout = (int)api.RequestTimeout.TotalMilliseconds);
|
||||
request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36");
|
||||
request.Timeout = (int)api.RequestTimeout.TotalMilliseconds;
|
||||
await api.ProcessRequestAsync(request, payload);
|
||||
|
||||
// send the request
|
||||
var response = request.Response;
|
||||
string responseString;
|
||||
using var cancel = new CancellationTokenSource(request.Timeout);
|
||||
try
|
||||
{
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Begin, uri.AbsoluteUri);
|
||||
using var webHttpRequest = request.ToHttpRequestMessage();
|
||||
using var webHttpResponse = await _httpClient.SendAsync(webHttpRequest, _cancellationToken);
|
||||
string text = await webHttpResponse.Content.ReadAsStringAsync();
|
||||
if (!webHttpResponse.IsSuccessStatusCode)
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Begin, uri.AbsoluteUri);// when start make a request we send the uri, this helps developers to track the http requests.
|
||||
response = await _httpClient.SendAsync(request.Request, cancel.Token);
|
||||
if (response == null)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
{
|
||||
throw new APIException($"{webHttpResponse.StatusCode.ConvertInvariant<int>(0)} - {webHttpResponse.StatusCode}");
|
||||
}
|
||||
throw new APIException(text);
|
||||
throw new APIException("Unknown response from server");
|
||||
}
|
||||
api.ProcessResponse(new InternalHttpWebResponse(webHttpResponse));
|
||||
responseString = await response.Content.ReadAsStringAsync();
|
||||
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Finished, text);
|
||||
return text;
|
||||
if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
|
||||
{
|
||||
// 404 maybe return empty responseString
|
||||
if (string.IsNullOrWhiteSpace(responseString))
|
||||
{
|
||||
throw new APIException(string.Format("{0} - {1}", response.StatusCode.ConvertInvariant<int>(), response.StatusCode));
|
||||
}
|
||||
|
||||
throw new APIException(responseString);
|
||||
}
|
||||
|
||||
api.ProcessResponse(new InternalHttpWebResponse(response));
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Finished, responseString);
|
||||
}
|
||||
catch (Exception arg)
|
||||
catch (OperationCanceledException ex) when (cancel.IsCancellationRequested)
|
||||
{
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Error, arg);
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Error, ex);
|
||||
throw new TimeoutException("APIRequest timeout", ex);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RequestStateChanged?.Invoke(this, RequestMakerState.Error, ex);
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
response?.Dispose();
|
||||
}
|
||||
return responseString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user