HttpClient Ошибка слишком много запросов ограничение скорости - PullRequest
0 голосов
/ 14 июня 2019

Я вызываю HTTP-запросы к API, который имеет ограничение на количество запросов.

Эти HTTP-запросы выполняются в циклах и выполняются очень быстро, в результате чего HttpClient иногда выдает ошибку исключения «10030 App Rate Limit Exceeded», которая является ошибкой 429 HTTP для слишком большого количества запросов.

Я могу решить эту проблему, выполняя Thread.Sleep между каждым вызовом, однако это замедляет работу приложения и не является разумным.

Вот код, который я использую:

public static async Task<List<WilliamHillData.Event>> GetAllCompetitionEvents(string compid)
{
        string res = "";

        try
        {
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
                client.DefaultRequestHeaders.TryAddWithoutValidation("apiKey", "KEY");

                using (HttpResponseMessage response = await client.GetAsync("https://gw.whapi.com/v2/sportsdata/competitions/" + compid + "/events/?&sort=startDateTime"))
                {
                    res = await response.Content.ReadAsStringAsync();
                }
            }

            JObject jobject = JObject.Parse(res);
            List<WilliamHillData.Event> list = jobject["events"].ToObject<List<WilliamHillData.Event>>();

            return list;
        }
        catch (Exception ex)
        {
            throw ex;
        }
}

Есть ли способ узнать, сколько запросов можно сделать в секунду / минуту? И, возможно, после того, как предел достигнут, уменьшите или выполните Thread.Sleep до тех пор, пока предел не уменьшится вместо выполнения Thread.Sleep каждый раз, когда он вызывается, поэтому я замедляю приложение, когда оно требуется?

Приветствие.

1 Ответ

0 голосов
/ 14 июня 2019

Есть ли способ узнать, сколько запросов можно сделать в секунду / минуту?

Помогло бы узнать владельца API или прочитать Документацию по API. Вы также можете проверить это, но никогда не знаете, есть ли другие ограничения и даже бан.

Я могу решить эту проблему, выполняя Thread.Sleep между каждым вызовом, однако это замедляет работу приложения и не является разумным.

Тебе нужно. Вы можете отфильтровать ошибку 429 и не дать ей выбросить. Вы должны выглядеть лучше и быстрее. Замедляйте свои API-вызовы, так что вы остаетесь в пределах лимита или идете на полной скорости, пока не получите тайм-аут и не дождетесь этого времени.

...