megahertz/guzzle-tor

This Guzzle middleware allows to use Tor client as a proxy

v1.1.0 2020-12-24 14:09 UTC

This package is auto-updated.

Last update: 2024-09-24 21:57:46 UTC


README

Build Status

This Guzzle middleware allows to use Tor client as a proxy

function get_tor_ip()
{
    $stack = new HandlerStack();
    $stack->setHandler(new CurlHandler());
    $stack->push(Middleware::tor());
    $client = new Client(['handler' => $stack]);

    $response = $client->get('https://check.torproject.org/');

    if (preg_match('/<strong>([\d.]+)<\/strong>/', $response->getBody(), $matches)) {
        return $matches[1];
    } else {
        return null;
    }
}

Get started

  1. Install composer

Follow the instruction at https://getcomposer.org/download/

  1. Install guzzle-tor
php composer.phar require megahertz/guzzle-tor
  1. (optional) Copy an example and run
cp vendor/megahertz/guzzle-tor/example.php example.php
php example.php

Symfony 3/4 config DI

services:

    GuzzleHttp\HandlerStack: ~
    
    app.client.tor:
      class: GuzzleTor\Middleware
      factory: ['GuzzleTor\Middleware', tor]

    app.client.handler_stack:
      factory: GuzzleHttp\HandlerStack:create
      class: GuzzleHttp\HandlerStack
      calls:
      - [ push, ['@app.client.tor'] ]

    app.client:
      class: GuzzleHttp\Client
      arguments:
      - {handler: '@app.client.handler_stack'}

    #Aliases
    GuzzleHttp\Client: '@app.client'

Options

General

Middleware::tor($proxy, $torControl)
  • $proxy is tor socks5 port, by default '127.0.0.1:9050'
  • $torControl is Tor control port, by default '127.0.0.1:9051'. Set if you want to change ip (clean circuits)

Request options

$client->get('https://check.torproject.org/', [
    'tor_new_identity'           => true,
    'tor_new_identity_sleep'     => 15,
    'tor_new_identity_timeout'   => 3,
    'tor_new_identity_exception' => true, 
    'tor_control_password'       => 'password' 
]);