PHP code example of kyzegs / guzzle-rate-limit-middleware
1. Go to this page and download the library: Download kyzegs/guzzle-rate-limit-middleware library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
kyzegs / guzzle-rate-limit-middleware example snippets
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use Kyzegs\GuzzleRateLimitMiddleware\RateLimitMiddleware;
$stack = HandlerStack::create();
$stack->push(new RateLimitMiddleware());
$client = new Client(['handler' => $stack]);
use Kyzegs\GuzzleRateLimitMiddleware\Config\GlobalLimit;
use Kyzegs\GuzzleRateLimitMiddleware\Config\InvalidRequestLimit;
use Kyzegs\GuzzleRateLimitMiddleware\Config\Options;
$middleware = RateLimitMiddleware::discord(options: new Options(
globalLimit: new GlobalLimit(maxRequests: 50, windowSeconds: 1),
invalidRequestLimit: new InvalidRequestLimit(maxRequests: 9000, windowSeconds: 600),
maxDelaySeconds: 120,
));
use Kyzegs\GuzzleRateLimitMiddleware\RateLimitMiddleware;
use Kyzegs\GuzzleRateLimitMiddleware\Store\Psr16Store;
$middleware = RateLimitMiddleware::github(
store: new Psr16Store($psr16Cache), // e.g. Redis, Laravel or Symfony cache
);
use Kyzegs\GuzzleRateLimitMiddleware\Store\FilesystemStore;
$middleware = RateLimitMiddleware::github(
store: new FilesystemStore('/var/cache/rate-limits'),
);
use Kyzegs\GuzzleRateLimitMiddleware\Config\Headers;
use Kyzegs\GuzzleRateLimitMiddleware\RateLimitMiddleware;
$headers = new Headers(
limit: 'X-API-Limit',
remaining: 'X-API-Remaining',
reset: 'X-API-Reset', // absolute timestamp OR relative seconds
resetAfter: null, // relative seconds (preferred when present)
retryAfter: 'Retry-After', // used for 429 retry delays
bucket: null, // enables bucket-hash discovery when set
global: null, // "true" indicates a global rate limit
scope: null, // "global" indicates a global rate limit
);
$middleware = RateLimitMiddleware::create(headers: $headers);
use Kyzegs\GuzzleRateLimitMiddleware\Config\Options;
use Kyzegs\GuzzleRateLimitMiddleware\RateLimitMiddleware;
$options = new Options(
maxRetries: 3, // retries for a request that keeps getting 429
safetyBufferSeconds: 1.0, // added to every computed delay (clock skew/latency)
jitterPercent: 0.0, // random extra delay, 0-100% of the base delay
throwOnRateLimit: true, // throw once retries are exhausted on a 429
maxStoreTtl: 604800, // upper bound for cached bucket state (seconds)
retryStatusCodes: [429], // statuses that trigger a retry
);
$middleware = RateLimitMiddleware::create(options: $options);
// Presets: Options::default(), Options::conservative(), Options::aggressive()
use Kyzegs\GuzzleRateLimitMiddleware\Contracts\BucketResolverInterface;
use Psr\Http\Message\RequestInterface;
final class MyResolver implements BucketResolverInterface
{
public function resolve(RequestInterface $request): string
{
return $request->getMethod() . ' ' . $request->getUri()->getPath();
}
}
$middleware = RateLimitMiddleware::create(resolver: new MyResolver());
$middleware = RateLimitMiddleware::create(lockFactory: new MyLockFactory());
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.