HttpClient错误太多请求速率限制

时间:2019-06-14 11:21:30

标签: c# http httpclient response limit

我正在向API调用HTTP请求,该API对可以发出的请求数量有限制。

这些HTTP请求以循环方式完成,并且很快完成,导致HttpClient有时会抛出“超过10030应用程序速率限制”异常错误,对于太多请求,这是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 :(得分:0)

  

有没有办法找出每秒钟/分钟可以发出多少个请求?

询问API的所有者或阅读API文档会有所帮助。您也可以对其进行测试,但您永远不知道是否还有其他限制,甚至禁止。

  

我可以通过在每次调用之间执行Thread.Sleep来解决此问题,但这会使应用程序变慢并且不合理。

您需要。您可以过滤掉429错误并且不让它抛出。您必须看起来更好更快。放慢API调用的速度,使您保持在限制范围内或全速前进,直到超时并等待该时间为止。