2017 © Pedro Peláez
 

library guzzle-rate-limiter

Guzzle 6 middleware used to delay requests dynamically

image

rtheunissen/guzzle-rate-limiter

Guzzle 6 middleware used to delay requests dynamically

  • Wednesday, July 4, 2018
  • by rtheunissen
  • Repository
  • 4 Watchers
  • 47 Stars
  • 24,528 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 5 Forks
  • 0 Open issues
  • 10 Versions
  • 25 % Grown

The README.md

Guzzle middleware to delay requests

Author License Latest Version Build Status Scrutinizer Scrutinizer Coverage, (*1)

Installation

composer require rtheunissen/guzzle-rate-limiter

Usage

There is currently no default implementation for RateLimitProvider., (*2)

use Concat\Http\Middleware\RateLimiter;

$handlerStack->push(new RateLimiter($rateLimitProvider));

Example

<?php

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\RequestInterface;
use Concat\Http\Middleware\RateLimitProvider;

/**
 * An object which manages rate data for a rate limiter, which uses the data to
 * determine wait duration. Keeps track of:
 *
 *  - Time at which the last request was made
 *  - The allowed interval between the last and next request
 */
class Provider implements RateLimitProvider
{
    /**
     * Returns when the last request was made.
     *
     * @return float|null When the last request was made.
     */
    public function getLastRequestTime()
    {
        // This is just an example, it's up to you to store the time of the
        // most recent request, whether it's in a database or cache driver.
        return Cache::get('last_request_time');
    }

    /**
     * Used to set the current time as the last request time to be queried when
     * the next request is attempted.
     */
    public function setLastRequestTime()
    {
        // This is just an example, it's up to you to store the time of the
        // most recent request, whether it's in a database or cache driver.
        return Cache::forever('last_request_time', microtime(true));
    }

    /**
     * Returns what is considered the time when a given request is being made.
     *
     * @param RequestInterface $request The request being made.
     *
     * @return float Time when the given request is being made.
     */
    public function getRequestTime(RequestInterface $request)
    {
        return microtime(true);
    }

    /**
     * Returns the minimum amount of time that is required to have passed since
     * the last request was made. This value is used to determine if the current
     * request should be delayed, based on when the last request was made.
     *
     * Returns the allowed time between the last request and the next, which
     * is used to determine if a request should be delayed and by how much.
     *
     * @param RequestInterface $request The pending request.
     *
     * @return float The minimum amount of time that is required to have passed
     *               since the last request was made (in microseconds).
     */
    public function getRequestAllowance(RequestInterface $request)
    {
        // This is just an example, it's up to you to store the request 
        // allowance, whether it's in a database or cache driver.
        return Cache::get('request_allowance');
    }

    /**
     * Used to set the minimum amount of time that is required to pass between
     * this request and the next request.
     *
     * @param ResponseInterface $response The resolved response.
     */
    public function setRequestAllowance(ResponseInterface $response)
    {
        // Let's also assume that the response contains two headers:
        //     - ratelimit-remaining
        //     - ratelimit-window
        //
        // The first header tells us how many requests we have left in the 
        // current window, the second tells us how many seconds are left in the
        // window before it expires.
        $requests = $response->getHeader('ratelimit-remaining');
        $seconds  = $response->getHeader('ratelimit-window');

        // The allowance is therefore how much time is remaining in our window
        // divided by the number of requests we can still make. This is the 
        // value we need to store to determine if a future request should be 
        // delayed or not.
        $allowance = (float) $seconds / $requests;

        // This is just an example, it's up to you to store the request 
        // allowance, whether it's in a database or cache driver.
        Cache::forever('request_allowance', $allowance);
    }
}

The Versions

04/07 2018

dev-master

9999999-dev

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

04/07 2018

v2.0.0

2.0.0.0

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

04/04 2017

v1.0.1

1.0.1.0

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

04/04 2017

v1.0.0

1.0.0.0

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

19/01 2017

v0.4.0

0.4.0.0

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

18/06 2015

v0.3.0

0.3.0.0

Guzzle 6 middleware used to delay requests dynamically

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

middleware http psr7 guzzle throttle rate

14/06 2015

v0.2.1

0.2.1.0

Guzzle middleware to delay requests that exceed a rate allowance

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

14/06 2015

v0.2.0

0.2.0.0

Guzzle middleware to delay requests that exceed a rate allowance

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

13/06 2015

v0.1.0

0.1.0.0

Guzzle middleware to delay requests that exceed a rate allowance

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen

05/06 2015

v0.0.1

0.0.1.0

Guzzle middleware to delay requests that exceed a rate allowance

  Sources   Download

MIT

The Requires

 

The Development Requires

by Rudi Theunissen