我正在向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,所以我在需要时放慢了应用程序的速度?
干杯。
答案 0 :(得分:0)
有没有办法找出每秒钟/分钟可以发出多少个请求?
询问API的所有者或阅读API文档会有所帮助。您也可以对其进行测试,但您永远不知道是否还有其他限制,甚至禁止。
我可以通过在每次调用之间执行Thread.Sleep来解决此问题,但这会使应用程序变慢并且不合理。
您需要。您可以过滤掉429错误并且不让它抛出。您必须看起来更好更快。放慢API调用的速度,使您保持在限制范围内或全速前进,直到超时并等待该时间为止。