как изменить поведение HttpClient?

Делаю 2й запрос и возвращается статус код 302

Если устанавливаю задержку между первым и вторым запросом, то получаю статус код 200

Тупо получив 302 чуть позже сделать новый запрос ? Или можно предпринять что то ещё ?

HttpClientHandler httpClientHandler = new()
{
   AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate | DecompressionMethods.Brotli,
   AllowAutoRedirect = true
};

HttpClient httpClient = new(httpClientHandler);

.........

HttpResponseMessage response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead);
        
int responseHttpStatusCode = (int)response.StatusCode;
    
string otvet = await response.Content.ReadAsStringAsync();

Ответы (1 шт):

Автор решения: VladD

Смотрите, в чём проблема.

Вас перенаправляют (redirect) с защищённого соединения (HTTPS) на незащищённое (HTTP). Это не очень-то хорошо, вот .NET и не делает авто-редирект. (Это поведение обсуждается здесь.) И я бы тоже не советовал, т. к. вы снижаете безопасность для ваших пользователей, и информацию «в пути» (например, пароли, если вы их передаёте) сможет читать кто угодно.


На тот редкий случай, если вам можно игнорировать проблемы с безопасностью, делайте ручной редирект на Location из ответа:

HttpClient httpClient = new(httpClientHandler);
HttpResponseMessage response =
    await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead);

const int maxRedirects = 20;

for (int i = 0; i < maxRedirects &&
                response.StatusCode == HttpStatusCode.Redirect &&
                response.Headers.Location != null; i++)
{
    // следуем редиректу
    var newRequest = new HttpRequestMessage(request.Method, response.Headers.Location)
    {
        /* установите другие нужные свойства тут */
    };
    response =
        await httpClient.SendAsync(newRequest, HttpCompletionOption.ResponseHeadersRead);
}

if (response.StatusCode == HttpStatusCode.Redirect)
{
    // с нами что, в собачки играют?
    // слишком много редиректов, выбрасываем исключение
}

// и если другие ошибки, тоже
response.EnsureSuccessStatusCode();

string otvet = await response.Content.ReadAsStringAsync();
→ Ссылка