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.
Install using composer:
composer require jenssegers/proxy
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.
useProxy\Proxy;
useProxy\Adapter\Guzzle\GuzzleAdapter;
useProxy\Filter\RemoveEncodingFilter;
useLaminas\Diactoros\ServerRequestFactory;
// Create a PSR7 request based on the current browser request.$request = ServerRequestFactory::fromGlobals();
// Create a guzzle client$guzzle = newGuzzleHttp\Client();
// Create the proxy instance$proxy = newProxy(newGuzzleAdapter($guzzle));
// Add a response filter that removes the encoding headers.$proxy->filter(newRemoveEncodingFilter());
// Forward the request and get the response.$response = $proxy->forward($request)->to('http://example.com');
// Output response to the browser.
(newLaminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($response);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');