Структура Symfony имеет пакеты, которые могут анализировать HTML, и вы можете использовать стиль CSS для выбора DOMs вместо использования XPath .
Вы не можете сделать это, чтобы изменить это. Это просто поведение по умолчанию в реализации HttpClient.
Свойство Timeout должно быть установлено до вызова метода GetRequestStream или GetResponse. Из раздела HttpClient.Timeout Remark
blockquote>Чтобы изменить таймаут, было бы лучше создать новый экземпляр HttpClient.
client = new HttpClient(); client.Timeout = 20; //set new timeout
Внутренне свойство Timeout
используется для установки CancellationTokenSource
, который прервет операцию async, когда этот таймаут будет достигнут. Поскольку некоторые перегрузки методов HttpClient
принимают CancellationTokens
, мы можем создавать вспомогательные методы для получения пользовательских тайм-аутов для определенных операций:
public async Task<string> GetStringAsync(string requestUri, TimeSpan timeout)
{
using (var cts = new CancellationTokenSource(timeout))
{
HttpResponseMessage response = await _httpClient.GetAsync(requestUri, cts.Token)
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
Недостаток поддержки пользовательских тайм-аутов на уровне запросов всегда был недостатком HttpClient
в моем сознании. Если вы не возражаете против небольшой зависимости от библиотеки, Flurl.Http [отказ от ответственности: я автор] поддерживает это напрямую:
"http://api.com/endpoint".WithTimeout(30).GetJsonAsync<T>();
Это истинный запрос, настройка уровня; все вызовы одного и того же хоста используют общий экземпляр HttpClient
под капотом, а одновременные вызовы с разными тайм-аутами не конфликтуют. Существует настраиваемое глобальное значение по умолчанию (сначала 100 секунд, так же как HttpClient
).