Я работаю над проектом, который требует доступа к некоторым веб-сайтам с включенным и отключенным tor и записывает различия в содержании. Я работаю над deepin (это дистрибутив Debian на основе Linux) и использую Python 2.7 для выполнения задачи. Проблема в том, что мне приходится вручную включать/отключать tor и менять настройки системного прокси каждый раз, когда я запускаю скрипт. Теперь я знаю, что могу выполнить команду оболочки из самого Python, чтобы включить tor (запуск службы tor), но я не могу понять, как включить/отключить настройки системного прокси из Python.
Я уже пробовал это, но не повезло.
Возможный дубликат Как передать весь трафик Python через http-прокси?, Как отключить переменную среды http_proxy в Python и т. д.
это не дубликат этого вопроса. Этот вопрос касается HTTP-прокси. Tor - это SOCKS-прокси, к которому вопрос не относится.
Используйте os.system
, чтобы установить нужный прокси.
import os
os.system("export http_proxy = "http://username:Password@Proxy_IP:Port/")
Чтобы отключить, просто используйте
os.system("unset http_proxy")
РЕДАКТИРОВАТЬ
Tor использует SOCKS-прокси. Для socks-прокси используйте
os.system("export socks_proxy = "socks://username:Password@Proxy_IP:Port/")
Проблема в том, что Tor — это не HTTP-прокси, а SOCKS-прокси. Я попытался изменить ваш код на «socks_proxy» вместо «http_proxy», а затем попытался использовать request.session(), чтобы получить мой IP-адрес от httpbin.org/ip, но возвращенный IP-адрес был таким же, как мой исходный IP-адрес, что означает, что запрос не пройти через тор. Я использовал: os.system("export socks_proxy=\"http://:@127.0.0.1:9050/\"")
@KhizarAmin Я обновляю свой ответ для прокси-сервера socks. То, что вы пробовали для носков, частично верно. Пожалуйста, смотрите правку в ответе для правильной команды.
У меня все работает, отпишусь здесь на случай, если у кого-то еще будет такая же проблема:
from selenium import webdriver
import stem.process
from stem import Signal
from stem.control import Controller
from splinter import Browser
proxyIP = "127.0.0.1"
proxyPort = 9050
proxy_settings = {"network.proxy.type":0,
"network.proxy.socks": proxyIP,
"network.proxy.socks_port": proxyPort
}
browser = Browser('firefox', profile_preferences=proxy_settings)
driver = browser.driver
driver.get('https://whatismyip.com')
изменение network.proxy.type на 1 сбрасывает настройки прокси. Решение найдено здесь
* дистрибутив Linux на основе Debian