通过 Tor 代理使用 requests.get 发出请求,但代码没有响应
Making a request using requests.get through tor proxies but the code is not responding
我想使用 Tor 向网页发出多个 GET 请求。我想为每个请求使用不同的ipaddress,所以我写了小程序
from stem import Signal
from stem.control import Controller
import requests
def change_ip():
with Controller.from_port(port=9051) as contr:
contr.authenticate(password='abhishek')
contr.signal(Signal.NEWNYM)
session=requests.session()
session.proxies={}
session.proxies['http']='socks5://127.0.0.1:9051'
session.proxies['https']='socks5://127.0.0.1:9051'
for i in range(5):
r=session.get('http://httpbin.org/ip')
print(r.text)
change_ip()
使用这个,我发出了多个请求,但这个程序没有显示任何输出,它卡住了,就像我在这张图片中显示的那样this is the screenshot of terminal where i run this program and it stucked
但是当我删除代码的 session.proxies 区域时,代码是 运行 并显示了输出,但这对我来说毫无意义,因为我想在每次请求后更改 ip 地址。
Tor 在端口 9050
上运行代理,而不是 9051
。端口 9051
仅用于 control/change Tor。
发送信号后,我也需要几秒钟才能获得新 IP。
当我不对所有 url 使用一个会话但对正常请求使用一个会话时效果更好
requests.get(..., proxies=proxies)
在一次会话中,它有时会为 https://httpbin.org/ip and https://api.ipify.org but not for https://icanhazip.com 提供相同的 IP。
如果我在每个循环中创建新会话,它会正常工作。
没有会话的版本
from stem import Signal
from stem.control import Controller
import requests
import time
def change_ip():
with Controller.from_port(port=9051) as control:
control.authenticate(password='password')
control.signal(Signal.NEWNYM)
proxies = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
for i in range(5):
r = requests.get('https://httpbin.org/ip', proxies=proxies)
print(r.json()['origin'])
r = requests.get('https://api.ipify.org', proxies=proxies)
print(r.text)
r = requests.get('https://icanhazip.com', proxies=proxies)
print(r.text)
change_ip()
time.sleep(5)
带有会话的版本 - 每个循环中的新会话
from stem import Signal
from stem.control import Controller
import requests
import time
def change_ip():
with Controller.from_port(port=9051) as control:
control.authenticate(password='password')
control.signal(Signal.NEWNYM)
for i in range(5):
session = requests.Session()
session.proxies = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
r = session.get('https://httpbin.org/ip')
print(r.json()['origin'])
r = session.get('https://api.ipify.org')
print(r.text)
r = session.get('https://icanhazip.com')
print(r.text)
change_ip()
time.sleep(5)
我想使用 Tor 向网页发出多个 GET 请求。我想为每个请求使用不同的ipaddress,所以我写了小程序
from stem import Signal
from stem.control import Controller
import requests
def change_ip():
with Controller.from_port(port=9051) as contr:
contr.authenticate(password='abhishek')
contr.signal(Signal.NEWNYM)
session=requests.session()
session.proxies={}
session.proxies['http']='socks5://127.0.0.1:9051'
session.proxies['https']='socks5://127.0.0.1:9051'
for i in range(5):
r=session.get('http://httpbin.org/ip')
print(r.text)
change_ip()
使用这个,我发出了多个请求,但这个程序没有显示任何输出,它卡住了,就像我在这张图片中显示的那样this is the screenshot of terminal where i run this program and it stucked
但是当我删除代码的 session.proxies 区域时,代码是 运行 并显示了输出,但这对我来说毫无意义,因为我想在每次请求后更改 ip 地址。
Tor 在端口 9050
上运行代理,而不是 9051
。端口 9051
仅用于 control/change Tor。
发送信号后,我也需要几秒钟才能获得新 IP。
当我不对所有 url 使用一个会话但对正常请求使用一个会话时效果更好
requests.get(..., proxies=proxies)
在一次会话中,它有时会为 https://httpbin.org/ip and https://api.ipify.org but not for https://icanhazip.com 提供相同的 IP。
如果我在每个循环中创建新会话,它会正常工作。
没有会话的版本
from stem import Signal
from stem.control import Controller
import requests
import time
def change_ip():
with Controller.from_port(port=9051) as control:
control.authenticate(password='password')
control.signal(Signal.NEWNYM)
proxies = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
for i in range(5):
r = requests.get('https://httpbin.org/ip', proxies=proxies)
print(r.json()['origin'])
r = requests.get('https://api.ipify.org', proxies=proxies)
print(r.text)
r = requests.get('https://icanhazip.com', proxies=proxies)
print(r.text)
change_ip()
time.sleep(5)
带有会话的版本 - 每个循环中的新会话
from stem import Signal
from stem.control import Controller
import requests
import time
def change_ip():
with Controller.from_port(port=9051) as control:
control.authenticate(password='password')
control.signal(Signal.NEWNYM)
for i in range(5):
session = requests.Session()
session.proxies = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
r = session.get('https://httpbin.org/ip')
print(r.json()['origin'])
r = session.get('https://api.ipify.org')
print(r.text)
r = session.get('https://icanhazip.com')
print(r.text)
change_ip()
time.sleep(5)