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;
}
}
- Install composer
Follow the instruction at https://getcomposer.org/download/
- Install guzzle-tor
php composer.phar require megahertz/guzzle-tor
- (optional) Copy an example and run
cp vendor/megahertz/guzzle-tor/example.php example.php
php example.php
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'
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)
$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'
]);
Name | Description |
---|---|
tor_new_identity | Change an identity/IP (clean circuits) before request. If it's set, we send NEWNYM signal to Tor client. Please be aware, that this method does not guarantee that an identity will be changed soon |
tor_new_identity_sleep | Pause (seconds) between an ip change identity and a request sending |
tor_new_identity_timeout | Timeout for a Tor control connection |
tor_control_password | Tor control password |
tor_new_identity_exception | If true throw TorNewIdentityException if an error was occurred while trying to change an identity |