jenssegers / proxy
Proxy library that forwards requests to the desired url and returns the response.
Installs: 475 767
Dependents: 4
Suggesters: 0
Security: 0
Stars: 942
Watchers: 38
Forks: 267
Open Issues: 26
pkg:composer/jenssegers/proxy
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: 2025-10-05 16:20:06 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');