Added TorClient

new file:   src/Sikofitt/Tor/Exception/BadProxyUrlException.php
	new file:   src/Sikofitt/Tor/TorClient.php
This commit is contained in:
R. Eric Wheeler 2016-12-23 11:45:59 -08:00
parent a41fc59c10
commit 5772d9f173
2 changed files with 131 additions and 0 deletions

View File

@ -0,0 +1,12 @@
<?php
/**
* Created by PhpStorm.
* User: sikof
* Date: 12/23/2016
* Time: 11:43 AM
*/
namespace Sikofitt\Tor\Exception;
class BadProxyUrlException extends \InvalidArgumentException {}

View File

@ -0,0 +1,119 @@
<?php
/**
* Created by PhpStorm.
* User: sikof
* Date: 12/23/2016
* Time: 11:09 AM
*/
namespace Sikofitt\Tor;
use GuzzleHttp\Client;
use GuzzleHttp\Handler\CurlMultiHandler;
use GuzzleHttp\HandlerStack;
use GuzzleTor\Middleware;
use Sikofitt\Tor\Exception\BadProxyUrlException;
class TorClient
{
private $client;
private $proxy;
private $torControl;
private $handlerStack;
private $middleware;
public function __construct($proxy = '127.0.0.1:9050', $torControl = '127.0.0.1:9051')
{
$this->proxy = $proxy;
$this->torControl = $torControl;
$this->handlerStack = new HandlerStack();
$this->handlerStack->setHandler(new CurlMultiHandler());
$this->handlerStack->push(Middleware::tor($this->proxy, $this->torControl));
$this->client = new Client([
'verify' => false,
'handler' => $this->handlerStack,
]);
}
public function setProxyPort($port)
{
preg_replace('/:\d{4}/', ':' . $port, $this->proxy);
return $this;
}
public function setTorControlPort($port)
{
preg_replace('/:\d{4}/', ':' . $port, $this->torControl);
return $this;
}
public function setProxyUrl($proxyUrl)
{
if(false === is_numeric(str_replace('.','', '127.0.0.1'))) {
throw new BadProxyUrlException('Tor Proxy URL must be an IP address.');
}
preg_replace('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $proxyUrl, $this->proxy);
return $this;
}
/**
* @param $torControlUrl
* @return $this
* @throws BadProxyUrlException
*/
public function setTorControlUrl($torControlUrl)
{
if(false === is_numeric(str_replace('.','', '127.0.0.1'))) {
throw new BadProxyUrlException('Tor Control URL must be an IP address.');
}
preg_replace('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $torControlUrl, $this->torControl);
return $this;
}
public function setClient()
{
$this->client = new Client([
'verify' => false,
'handler' => $this->handlerStack,
]);
return $this;
}
public function setTorMiddleWare() {
$this->middleware = Middleware::tor($this->proxy, $this->torControl);
return $this;
}
public function createHandlerStack()
{
$this->handlerStack = new HandlerStack();
$this->handlerStack->setHandler(new CurlMultiHandler());
$this->handlerStack->push($this->middleware);
}
public function setProxy($proxy)
{
$this->proxy = $proxy;
$this->handlerStack->remove(Middleware::tor());
$this->handlerStack->push(Middleware::tor($this->proxy, $this->torControl));
$this->client = new Client([
'verify' => false,
'handler' => $this->handlerStack,
]);
return $this;
}
public function getProxy()
{
return $this->proxy;
}
public function setTorControl($torControl)
{
$this->torControl = $torControl;
return $this;
}
public function getTorControl()
{
return $this->torControl;
}
public function get($url, $options = array()) {
return $this->client->get($url, $options);
}
}