私はチュートリアルTo Russia With Loveに従っていますが、その一環として、コードを実行するたびに ID を変更したいと考えています。複数の質問とチュートリアルを見てきましたが、その外観から、torrc-defaults ファイルは次のように正しいです: ControlPort 9151 CookieAuthentication 1
最初にtorrcファイルを編集したかったのですが、それを触るとTorが動かなくなるので、どこかで読んでtorrcを調べました。torrc ファイルだけでは次の内容しかありません。
# This file was generated by Tor; if you edit it, comments will not be preserved
# The old torrc file was renamed to torrc.orig.1 or similar, and Tor will ignore it
パスワードを設定したくないので、ステムドキュメントを読んで理解したところ、認証を設定するだけで十分です。次のコードがあります。
import socks # SocksiPy module
import socket
import requests
SOCKS_PORT = 9150
# Set socks proxy and wrap the urllib module
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket
def getaddrinfo(*args):
return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
socket.getaddrinfo = getaddrinfo
url = "http://google.com"
print requests.get(url).elapsed.total_seconds()
from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9151) as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
しかし、実行すると次のエラーが表示されます: socks.SOCKS5Error: 0x01: General SOCKS server failure
どうすればいいのかわかりません。これについて何時間も読んでいますが、問題を解決できませんでした。どんなヒントも素晴らしいでしょう。
編集: This Postも読みましたが、解決策があるようには見えません。ソケットを設定する前にControllerステートメントを入れてみましたが、その場合、IPは同じままで変更されません。