我一直在使用C#中的WebClient从网页中获取特定数据。这很好用,直到我做了2次以上。如果我做的次数超过2次,它会给我"(429)太多的请求“。错误。顺便说一句,我已经研究了关于这个问题的其他问题。
发布于 2014-06-20 16:48:01
这不是C#问题。这是来自web服务器的响应。可能是某种反DOS过滤器。尝试在请求之间进行暂停,即在每个请求之前暂停( System.Threading.Thread.Sleep(5000); )。
发布于 2021-12-10 04:11:58
我知道这个帖子已经很久了。但我想分享解决方案
也许您可以尝试将polly作为拦截器来重试请求。
对于策略处理程序
serviceCollection.AddHttpClient<IExternalAPI, ExternalAPI>(client =>
{
var url= "";
url = config.GetSection("Config").GetValue<string>("baseUrl");
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}).AddPolicyHandler((provider, request) =>
{
return Policy.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.TooManyRequests)
.RetryAsync(1, async (response, retryCount, context) =>
{
if (response.Result.StatusCode == HttpStatusCode.Unauthorized)
{
// Add delay here
Thread.Sleep(1000);
Logger.LogInformation("Unauthorized Request Occured, Re-authenticating");
await client.Authenticate();
}
// refresh auth token.发布于 2022-02-08 09:39:12
这篇文章很旧了,但我从我的网络服务器上下载图片时也遇到了同样的问题。我在this post上找到了解决方案
// THIS LINE IS THE IMPORTANT ONE
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " +
"Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " +
".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " +
"InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)";从那以后我再也没有遇到过任何问题。
https://stackoverflow.com/questions/24323055
复制相似问题