szczyglis/php-ultra-small-proxy

Lightweight proxy with full support for sessions, cookies, POST/FORM submissions, and URL rewriting.

v2.1.3 2024-08-26 04:23 UTC

This package is auto-updated.

Last update: 2024-11-26 04:56:36 UTC


README

Release: 2.1.3 | build: 2024.08.26 | PHP: ^7.2.5|^8.0

Ultra Small Proxy 2

Ultra Small Proxy is a lightweight proxy written in PHP.

How to install

composer require szczyglis/php-ultra-small-proxy

Features

  • Proxy server written in PHP
  • Easy to use and integrate
  • Simple and lightweight
  • Sessions support
  • Supports sending and receiving cookies
  • Supports sending and receiving HTTP headers
  • Cache and asset storage
  • Domain and IP/host connection support
  • HTTP Basic Auth support
  • GET and POST request handling
  • Form submission support
  • POST variable redirection
  • Toolbar with address bar, configuration, and debugger
  • URLs rewritten/proxied at runtime (links, images, CSS, JavaScript, etc.)
  • Two different methods for URL rewriting: Regex (with preg_replace) and XML (with libxml/DOM)
  • Supports PHP 7.2.5+ and 8.0+

Requirements

Usage example

<?php
// app.php

require __DIR__ . '/vendor/autoload.php';

use Szczyglis\UltraSmallProxy\UltraSmallProxy;
use Szczyglis\UltraSmallProxy\Config;

$config = new Config();

$proxy = new UltraSmallProxy($config);

echo $proxy->load('https://github.com'); // <-- specify start page here

Ensure you have write permissions to the ./cookies and ./cache directories.

WARNING: The cookies directory should not be publicly accessible!

Screenshot

proxy

Open loopback.php if you want to test proxy features such as session support, POST variable redirection, form submission, and more, e.g.:

<?php

$output = $proxy->load('http://localhost/loopback.php'); 

Repository contents:

  • src/ - proxy classes

  • index.php - usage example

  • loopback.php - loopback for testing features like session support, form variable sending, and cookie redirection

Basic usage

use Szczyglis\UltraSmallProxy\UltraSmallProxy;
use Szczyglis\UltraSmallProxy\Config;

$config = new Config();
$proxy = new UltraSmallProxy($config);

echo $proxy->load('https://github.com');

Configuration

$output = $proxy->load('https://github.com', $force = false); 

Boolean $force - if set to false, URLs given in the QUERY STRING will always overwrite URLs passed here. Set to true to reverse this behavior. Default: false.

Config values:

Before page load:

$config->set('init', true) - boolean, auto-init true|false, default: true

$config->set('source', 'domain') - string, input source domain|ip, default: domain

$config->set('raw', false) - boolean, raw download true|false, default: false

$config->set('toolbar', true) - boolean, attach toolbar true|false, default: true

$config->set('user_agent', 'Mozilla/4.0 (compatible;)') - string, user agent, default: Mozilla/4.0 (compatible;)

$config->set('timeout', 120) - int, curl timeout, default: 120

$config->set('max_redirects', 10) - int, curl max redirects, default: 10

$config->set('cookies_dir', './cookies') - string, cookies directory, default: ./cookies

$config->set('cache_dir', './cache') - string, cache directory, default: ./cache

$config->set('method', 'GET') - string, request method GET|POST

$config->set('rewrite', 'REGEX2') - string, rewrite method REGEX,REGEX2,REGEX3,DOM, default: REGEX2

$config->set('rewrite_url', true) - boolean, enable URL rewriting true|false, default: true

$config->set('rewrite_img', true) - boolean, enable IMG rewriting true|false, default: true

$config->set('rewrite_js', true) - boolean, enable JS rewriting true|false, default: true

$config->set('rewrite_form', true) - boolean, enable FORM ACTION rewriting true|false, default: true

$config->set('rewrite_css', true) - boolean, enable CSS rewriting true|false, default: true

$config->set('rewrite_video', true) - boolean, enable VIDEO rewriting true|false, default: true

$config->set('rewrite_ip', true) - boolean, enable domain to IP+Host resolve true|false, default: true

$config->set('assets', 'REDIRECT') - string, assets proxying mode REDIRECT|CURL, default: REDIRECT

$config->set('is_cfg', false) - boolean, show options true|false, default: false

$config->set('is_dbg', false) - boolean, show debug true|false, default: false

$config->set('htaccess_user', 'user') - string, HTTP AUTH user

$config->set('htaccess_pass', 'pass') - string, HTTP AUTH password

Public methods

After page load:

$siteCookies = $proxy->cookie->getSiteCookies() - returns cookies[] received from proxied site

$localCookies = $proxy->cookie->getLocalCookies() - returns cookies[] stored localy and sended to proxied site

$status = $proxy->http->getStatus() - returns connection status[]

$headers = $proxy->http->getHeaders() - returns received headers[]

$sid = $proxy->getSid() - returns proxied PHPSESSID if exists

$errors = $proxy->getErrors() - returns error messages[] if occured

Other methods:

$parsed = $proxy->render($html) - parses/rewrites URLs in custom HTML content with the selected $rewriteMode.

Changelog

2.1.0 -- Package was added to Packagist (2022-04-23)

2.1.1 -- Updated PHPDoc (2022-04-25)

2.1.2 -- Updated composer.json (2022-04-28)

2.1.3 -- improved documentation (2024-08-26)

Ultra Small Proxy is free to use, but if you like it, you can support my work by buying me a coffee ;)

https://www.buymeacoffee.com/szczyglis

Enjoy!

MIT License | 2022 Marcin 'szczyglis' SzczygliƄski

https://github.com/szczyglis-dev/php-ultra-small-proxy

https://szczyglis.dev

Contact: szczyglis@protonmail.com