我知道有几次问过类似的问题:
General SOCKS server failure with python tor but working from tor browser
General SOCKS server failure when switching identity using stem
General SOCKS server failure while using tor proxy
我检查了所有相关帖子并搜索了很多内容,但仍然卡住了。
我在Win10上。我下载Tor浏览器,运行它并确保它在端口127.0.0.1:9150上,管理员使用cmd netstat -aon
。
然后我在Python中运行以下示例代码:
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
最后一行socket.socket = socks.socksocket
给出了错误消息。
socks.GeneralProxyError: Socket error: 0x01: General SOCKS server failure
它应该返回一个套接字对象,该对象被分配给打开套接字的socket.socket。像这个例子:
https://deshmukhsuraj.wordpress.com/2015/03/08/anonymous-web-scraping-using-python-and-tor/
谁能告诉我什么是错的? 感谢。
更新
感谢drew010的回答,这段代码可以正常运行(运行Tor浏览器,端口= 9150):
import requests
proxies = {
'http': 'socks5h://127.0.0.1:9150',
'https': 'socks5h://127.0.0.1:9150'
}
url = 'http://icanhazip.com'
# request without Tor (original IP)
r = requests.get(url)
print(r.text)
# request with Tor (Tor IP)
r = requests.get(url, proxies=proxies)
print(r.text)
# Force change IP
from stem.control import Controller
from stem import Signal
with Controller.from_port(port = 9151) as controller:
controller.authenticate('mypassword')
controller.signal(Signal.NEWNYM)
# Changed Tor IP
r = requests.get(url, proxies=proxies)
print(r.text)
请注意,我们需要先在torrc中设置密码。
答案 0 :(得分:0)
通过做" socket.socket = socks.socksocket"您实际上将每个未来的套接字对象实际替换为socksocket对象,这意味着之后您可以使用常规套接字,它们将通过您的socks代理。