jenssegers / proxy
Proxy library that forwards requests to the desired url and returns the response.
Installs: 454 383
Dependents: 4
Suggesters: 0
Security: 0
Stars: 933
Watchers: 41
Forks: 268
Open Issues: 27
Requires
- php: ^5.6 || ^7.0
- guzzlehttp/guzzle: ^6.0
- laminas/laminas-diactoros: ^2.0
- laminas/laminas-httphandlerrunner: ^1.1
- psr/http-message: ^1.0
- relay/relay: ^1.0
Requires (Dev)
- mockery/mockery: ^1.1
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^5.0|^6.0|^7.0
This package is auto-updated.
Last update: 2024-11-05 14:17:17 UTC
README
This is a HTTP/HTTPS proxy script that forwards requests to a different server and returns the response. The Proxy class uses PSR7 request/response objects as input/output, and uses Guzzle to do the actual HTTP request.
Installation
Install using composer:
composer require jenssegers/proxy
Example
The following example creates a request object, based on the current browser request, and forwards it to example.com
. The RemoveEncodingFilter
removes the encoding headers from the original response so that the current webserver can set these correctly.
use Proxy\Proxy; use Proxy\Adapter\Guzzle\GuzzleAdapter; use Proxy\Filter\RemoveEncodingFilter; use Laminas\Diactoros\ServerRequestFactory; // Create a PSR7 request based on the current browser request. $request = ServerRequestFactory::fromGlobals(); // Create a guzzle client $guzzle = new GuzzleHttp\Client(); // Create the proxy instance $proxy = new Proxy(new GuzzleAdapter($guzzle)); // Add a response filter that removes the encoding headers. $proxy->filter(new RemoveEncodingFilter()); try { // Forward the request and get the response. $response = $proxy->forward($request)->to('http://example.com'); // Output response to the browser. (new Laminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($response); } catch(\GuzzleHttp\Exception\BadResponseException $e) { // Correct way to handle bad responses (new Laminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($e->getResponse()); }
Filters
You can apply filters to the requests and responses using the middleware strategy:
$response = $proxy ->forward($request) ->filter(function ($request, $response, $next) { // Manipulate the request object. $request = $request->withHeader('User-Agent', 'FishBot/1.0'); // Call the next item in the middleware. $response = $next($request, $response); // Manipulate the response object. $response = $response->withHeader('X-Proxy-Foo', 'Bar'); return $response; }) ->to('http://example.com');