Добрый день, я пытаюсь загрузить простой XML-документ, содержащий курсы валют, из http-вызова какого-то банковского API.
Я пытаюсь отправить обычный HTTP-запрос GET через HTTP-клиент в приложении ASP.NET Core.,Но обнаружил странное поведение, и я не могу определить причину этого.
Мой код Startup.cs для инициализации HttpClient выглядит:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 ;
services.AddHttpClient<UcbClient>(client =>
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
client.DefaultRequestHeaders.Add("User-Agent", "SampleApp-UserAgent");
}
).AddTransientHttpErrorPolicy(policy =>
policy.WaitAndRetryAsync(
options.RetryCount,
retryAttempt => TimeSpan.FromSeconds(Math.Pow(10, 3))));
И сам UcbClient:
public class UcbClient
{
private ILogger<UcbClient> _logger;
private IOptions<UcbClientOptions> _options;
private HttpClient _client;
public UcbClient(ILogger<UcbClient> logger, IOptions<UcbClientOptions> options, HttpClient client)
{
_logger = logger;
_options = options;
_client = client;
}
public async Task GetExchangeRates()
{
var response = await _client.GetStringAsync("https://www.unicreditbank.cz/cs/exchange_rates_xml.exportxml.html");
var response1 = await _client.GetStringAsync("https://www.unicreditbank.cz/cs/exchange_rates_xml.exportxml.html");
}
}
Код был сокращен, чтобы быть более понятным.
Если я отправлю аналогичный запрос через Postman или открою URL-адрес непосредственно в браузере, я получу правильные результаты (например, некоторую часть xml):
<exchange_rates bank="UCB" base_currency="CZK" date="14.03.2019" version="1.0">
<exchange_rate type="XML_RATE_TYPE_UCB_PURCHASE_VALUTA" valid_from="14.03.2019">
<currency name="AUD" quota="1" rate="15.244"/>
....
</exchange_rate>
<exchange_rate type="XML_RATE_TYPE_UCB_SALE_VALUTA" valid_from="14.03.2019">
<currency name="AUD" quota="1" rate="16.689"/>
....
Но если я сделаю то же самое с HttpClient (UcbClient.cs), первый запрос вернет неправильный xml (выглядит как какая-то схема):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE exchange_rates SYSTEM "https://www.unicreditbank.cz/etc/designs/cee2020-pws-cz/xml/exchange_rates.dtd">
<exchange_rates bank="UCB" base_currency="CZK" date="" version="1.0">
<exchange_rate type="XML_RATE_TYPE_UCB_PURCHASE_VALUTA"/>
<exchange_rate type="XML_RATE_TYPE_UCB_SALE_VALUTA"/>
<exchange_rate type="XML_RATE_TYPE_UCB_MIDDLE_VALUTA"/>
<exchange_rate type="XML_RATE_TYPE_CNB"/>
<exchange_rate type="XML_RATE_TYPE_UCB_PURCHASE_DEVIZA"/>
<exchange_rate type="XML_RATE_TYPE_UCB_SALE_DEVIZA"/>
<exchange_rate type="XML_RATE_TYPE_UCB_MIDDLE_DEVIZA"/>
</exchange_rates>
, но если яотправив второй запрос:
var response1 = await _client.GetStringAsync("https://www.unicreditbank.cz/cs/exchange_rates_xml.exportxml.html");
Я получаю правильные результаты.И я не могу понять причину этого.Что я упустил?Заранее спасибо.