AutoTor
Table of Contents
About the Project
Simple package to make requests throughout Tor in an automated way and with circuit renewal. At the moment, AutoTor is not OS-agnostic as it is tailored to Windows.
Contents
The most important source code elements in the project are outlined and described as follows:
-
main.py
: Implements an example of how the library should be used. - AutoTor module:
-
autotor_base.py
: Implements a class that takes care of all the logic to automate Tor download, Tor configuration, Tor initialisation, getting request sessions, Tor circuit renewal and releasing Tor resources. -
autotor_ip.py
: Implements an example class to override the request function that actually takes care of the requests. In this case, the function tries to get the IP in use by Tor.
-
Dependencies
Among others, the project has been built around the following Python libraries:
- requests[socks] (>=2.27.1)
- stem (>=1.8.0)
- fake-useragent (>=0.1.11)
Getting Started
Installation
Option 1 - setup.py
To install with pip
by using the setup.py, one should just follow two steps:
- Clone the project:
git clone https://github.com/salvaba94/AutoTor.git
- Run the following command to install the dependencies and AutoTor:
pip install .
Option 2 - PyPI
Installing AutoTor from PyPI is the simplest. It only requires the following command:
pip install autotor
Coding
Create your class
The main class of the package is TorRequests. It is a class with an abstract method request
that should be implemented in any derived class to customise the request as desired by the user. Below is the metacode for a sample implementation
from autotor import TorRequests
class MyClass(TorRequests):
# Override the initialisation function (if needed)
def __init__(self, tor_root = "..", another_arg = 5):
# Initialise superclass
super(MyClass, self).__init__(tor_root = tor_root)
# Initialise other parameters
self.another_arg = another_arg
# Override the request function and implement custom functionality
def request(self):
# Get Tor session
session = self.get_tor_session()
# Renew Tor circuit
self.renew_tor_ip()
# Use the session to get information
...
Note: In order to make the requests with another IP and user-agent just get another session and call the renew method.
Usage
Once one has implemented the request method in the derived class, it can be used within a with
statement. Any opened resources will be automatically cleared upon exiting the statement.
# Use request within a with statement
with MyClass(tor_root = ".", another_arg = 20) as tor:
tor.request()
Contributing
Any contributions are greatly appreciated. If you have suggestions that would make the project any better, fork the repository and create a pull request or simply open an issue. If you decide to follow the first procedure, here is a reminder of the steps:
- Fork the project.
- Create your branch:
git checkout -b branchname
- Commit your changes:
git commit -m "Add some amazing feature"
- Push to the branch:
git push origin branchname
- Open a pull request.
If you like the project and/or any of its contents results useful to you, don't forget to give it a star in GitHub! It means a lot to me .