如果由于临时过载而我想礼貌地拒绝网站上的服务,则HTTP响应503服务不可用似乎是合适的.该规范提到使用503 发送Retry-after标头.
有什么意义吗?Retry-after会影响任何事情吗?浏览器是否关注它?
是否可以使用requests
Python库限制GET请求的下载速率?例如,使用如下命令:
r = requests.get('https://stackoverflow.com/')
Run Code Online (Sandbox Code Playgroud)
...是否可以限制下载速率?我希望有类似这个wget
命令的东西:
wget --limit-rate=20k https://stackoverflow.com/
Run Code Online (Sandbox Code Playgroud)
我知道这是可能的urllib2
.我是专门询问requests
图书馆的.
我使用 Polly 来处理一些场景,例如请求限制和超时。这些策略直接添加到 Startup.cs 中,如下所示:
var retries = //applying the retries, let say I set to 25 times with 10s delay. Total 250s.
serviceCollection
.AddHttpClient<IApplicationApi, ApplicationApi>()
.AddPolicyHandler((services, request) => GetRetryPolicy<ApplicationApi>(retries, services));
Run Code Online (Sandbox Code Playgroud)
政策:
static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy<T>(List<TimeSpan> retries, IServiceProvider services)
{
return HttpPolicyExtensions
.HandleTransientHttpError()
.OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.TooManyRequests)
.WaitAndRetryAsync(retries,
onRetry: (outcome, timespan, retryAttempt, context) =>
{
//do some logging
}
}
Run Code Online (Sandbox Code Playgroud)
在 ApplicationApi.cs 中执行如下操作:
private readonly HttpClient _httpClient;
public ApplicationApi(HttpClient httpClient)
{
_httpClient = httpClient;
}
public void CallApi()
{
var …
Run Code Online (Sandbox Code Playgroud)