An open API service indexing awesome lists of open source software.

https://github.com/megahertz/guzzle-tor

This Guzzle middleware allows to use Tor client as a proxy
https://github.com/megahertz/guzzle-tor

Last synced: 3 months ago
JSON representation

This Guzzle middleware allows to use Tor client as a proxy

Awesome Lists containing this project

README

          

# GuzzleTor
[![Build Status](https://travis-ci.org/megahertz/guzzle-tor.svg?branch=master)](https://travis-ci.org/megahertz/guzzle-tor)

This [Guzzle](https://github.com/guzzle/guzzle) middleware allows to use Tor client as a proxy

```php
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('/([\d.]+)<\/strong>/', $response->getBody(), $matches)) {
return $matches[1];
} else {
return null;
}
}
```

## Get started

1. Install composer

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

2. Install guzzle-tor
```bash
php composer.phar require megahertz/guzzle-tor
```

3. (optional) Copy an example and run
```bash
cp vendor/megahertz/guzzle-tor/example.php example.php
php example.php
```

## Symfony 3/4 config DI
```yml
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

```php
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

```php
$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