gpt4 book ai didi

python - 在 Tor 上使用 Python 发出请求

转载 作者:IT老高 更新时间:2023-10-28 20:32:21 27 4
gpt4 key购买 nike

我想使用 Tor 向网页发出多个 GET 请求。我想为每个请求使用不同的 IP 地址。

import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
import requests
print (requests.get('http://icanhazip.com')).content

使用这个,我提出了一个请求。如何更改 ipaddress 以创建另一个?

最佳答案

你的问题有两个方面-

  1. 使用 Tor 发出请求
  2. 根据要求更新连接(在您的情况下,在每次请求之后)

第 1 部分

第一个很容易使用最新的(v2.10.0 以上) requests 库,附加要求为 requests[socks] 使用 socks 代理。

安装 -

pip install requests[socks]

基本用法 -

import requests

def get_tor_session():
session = requests.session()
# Tor uses the 9050 port as the default socks port
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
return session

# Make a request through the Tor connection
# IP visible through Tor
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)
# Above should print an IP different than your public IP

# Following prints your normal public IP
print(requests.get("http://httpbin.org/ip").text)

第 2 部分

要更新 Tor IP,即拥有一个新的可见退出 IP,您需要能够通过它的 ControlPort 连接到 Tor 服务。然后发送 NEWNYM信号。

普通 Tor 安装不启用 ControlPort默认。您必须编辑您的 torrc file并取消注释相应的行。

ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE

请注意 HashedControlPassword以上是密码"password" .如果要设置不同的密码,请替换 HashedControlPassword在 torrc 中,注意 tor --hash-password "<new_password>" 的输出在哪里 <new_password>是您要设置的密码。

.................................................. ..................................

Windows 用户警告:见帖子 here .

如果使用以下命令安装 tor,则在 windows 上会忽略 torrc 文件中控制端口的设置:

tor --service install

要解决此问题,请在编辑您的 torrc 文件后,键入以下命令:

tor --service remove
tor --service install -options ControlPort 9051

.................................................. ..................................

好的,现在我们已经正确配置了 Tor,如果 Tor 已经在运行,你必须重新启动它。

sudo service tor restart

Tor 现在应该在 9051 ControlPort 上启动并运行通过它我们可以向它发送命令。我更喜欢使用 official stem library控制 Tor。

安装 -

pip install stem

您现在可以通过调用以下函数来更新 Tor IP。

更新IP -

from stem import Signal
from stem.control import Controller

# signal TOR for a new connection
def renew_connection():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)

要验证 Tor 是否有新的退出 IP,只需重新运行第 1 部分中的代码。由于我不知道的某些原因,您需要创建一个新的 session对象以使用新 IP。

session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)

关于python - 在 Tor 上使用 Python 发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com