提问者:小点点

Android:不允许使用Reform2调用垃圾邮件请求


我遇到过这样的情况,一些用户最终陷入了一个循环,要求太频繁地调用API。太频繁=每秒10-20倍。

目前,我还没有找到问题所在,似乎这不是一个容易解决的问题,但我想知道,是否有可能对改型2设置某种限制,如果应用程序进入某种循环,单个API请求被多次调用,它实际上会忽略这些请求,例如,是否在第二个最大值内完成1-5倍的相同请求或类似的请求?

如何做到这一点(从网络库设置的角度)?(在找到根本原因之前,我想保护后端)


共2个答案

匿名用户

Guava的拦截器与RateLimitor相结合是避免接收429 HTTP代码的一个很好的解决方案。

假设我们想要每秒3个呼叫的限制:

import java.io.IOException;

import com.google.common.util.concurrent.RateLimiter;

import okhttp3.Interceptor;
import okhttp3.Response;

public class RateLimitInterceptor implements Interceptor {
    private RateLimiter rateLimiter = RateLimiter.create(3);

    @Override
    public Response intercept(Chain chain) throws IOException {
        rateLimiter.acquire(1);
        return chain.proceed(chain.request());
    }
}

匿名用户

根据这个答案,您可以使用调度程序如下:

Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(1);

OkHttpClient client = new OkHttpClient.Builder()
            .dispatcher(dispatcher)
            .build()

之后,您将能够一次发送一个请求。