A web proxy script written in PHP and built as an alternative to Glype.
Branch: master
Clone or download
Athlon1600 Merge pull request #113 from diffen/master
Bug fix for multi-value checkboxes in form data.
Latest commit 580be29 Mar 26, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Update Request.php Mar 21, 2018
.gitignore working copy May 6, 2015
LICENSE Create LICENSE Dec 28, 2016
README.md Added the ```php May 6, 2017
composer.json removed extra comma from composer.json Dec 25, 2017



Proxy script built on PHP, Symfony and cURL. This library borrows ideas from Glype, Jenssegers proxy, and Guzzle.

PHP-Proxy Web Application

If you're looking for a project version of this script that functions as a Web Application similar to Glype, then visit php-proxy-app

See this php-proxy in action: UnblockVideos.com


Install it using Composer:

composer require athlon1600/php-proxy



use Proxy\Http\Request;
use Proxy\Proxy;

$request = Request::createFromGlobals();

$proxy = new Proxy();

$proxy->getEventDispatcher()->addListener('request.before_send', function($event){

	$event['request']->headers->set('X-Forwarded-For', 'php-proxy');

$proxy->getEventDispatcher()->addListener('request.sent', function($event){

	if($event['response']->getStatusCode() != 200){
		die("Bad status code!");

$proxy->getEventDispatcher()->addListener('request.complete', function($event){

	$content = $event['response']->getContent();
	$content .= '<!-- via php-proxy -->';

$response = $proxy->forward($request, "http://www.yahoo.com");

// send the response back to the client

Plugin Example

namespace Proxy\Plugin;

use Proxy\Plugin\AbstractPlugin;
use Proxy\Event\ProxyEvent;

use Proxy\Html;

class MultiSiteMatchPlugin extends AbstractPlugin {

	// Matches multiple domain names (abc.com, abc.de, abc.pl) using regex (you MUST use / character)
	protected $url_pattern = '/^abc\.(com|de|pl)$/is';
	// Matches a single domain name
	//protected $url_pattern = 'abc.com';
	public function onCompleted(ProxyEvent $event){
		$response = $event['response'];
		$html = $response->getContent();
		// do your stuff here...

Notice that you must use the / character for regexes on $url_pattern