Search on blog:

Python: Jak użyć sieć Tor z requests ze zmienionym IP?

Sieć Tor może być użyta do uruchomienia requests ze zmienionym IP.

Jeśli masz już zainstalowany Tor wtedy powinien on chodzić cały czas jako usługa i powinna być możliwość użycia go jako proxy server z adresem 127.0.0.1:9050 (localhost:9050)

W requests możesz użyć

proxy = {
    'http':  'socks5://127.0.0.1:9050',
    'https': 'socks5://127.0.0.1:9050',
}

r = requests.get(url, proxies=proxy)  # using TOR network

A oto minimalny działajacy kod. Używam http://icanhazip.com aby pobrać IP jako tekst.

import requests

proxy = {
    'http':  'socks5://127.0.0.1:9050',
    'https': 'socks5://127.0.0.1:9050',
}

url = 'https://icanhazip.com'

r = requests.get(url, proxies=proxy)  # using TOR network
print('   Tor IP:', r.text)

r = requests.get(url)
print('direct IP:', r.text)

i w tym momencie pojazuje mi:

   Tor IP: 146.59.155.27
direct IP: 217.99.86.56

Ale Tor zazwyczac przez prawie przez cały czas używa tego samego IP.

Jeśli chcesz zmienić jego IP wtedy musisz restartować/przeładować usługę Tor.

Albo musiałbyś skonfigurować ControlPort (zazwyczaj 9051) oraz Password w ustawnieniach Tor (pod Linux w pliku /etc/tor/torrc)

i wtedy możesz zmienić IP Tora przez wysłanie sygnały poprzez socket

import socket

s = socket.socket()
s.connect(('127.0.0.1', 9051))
s.send('AUTHENTICATE "your_passord"\r\nSIGNAL NEWNYM\r\n'.encode())

lub możesz do tego użyć modułu stem

from stem import Signal
from stem.control import Controller

with Controller.from_port(port=9051) as controller:
    controller.authenticate(password='your_password')
    controller.signal(Signal.NEWNYM)

Pod Linux możesz też użyć programu netcat w terminalu

printf 'AUTHENTICATE "password"\r\nSIGNAL NEWNYM\r\n' | nc 127.0.0.1 9051

i możesz sprawdzić IP za pomocą

curl https://icanhazip.com
curl --proxy 'socks5://127.0.0.1:9050' https://icanhazip.com

Z tego co mi wiadomo to po wysłaniu sygnału czasami Tor może potrzebować kilku sekund aby zdobyć nowy IP więc może być potrzeba poczekania kilku sekund zanim wyślesz następny request z nowym IP.

If you like it
Buy a Coffee