туннель ssh запроса python в качестве прокси

Можно ли использовать запросы python с туннелем ssh в качестве прокси? Как я могу этого добиться? Пробовал уже это, но безуспешно:

from sshtunnel import SSHTunnelForwarder
import requests as r
from bs4 import BeautifulSoup as soup

server = SSHTunnelForwarder(
        'sship',
        ssh_username="XXXX",
        ssh_password="XXXX",
        remote_bind_address=('127.0.0.1', 8080)
    )

server.start()

print(server.local_bind_port)


proxies = {
    "http": "http://127.0.0.1:8080",
    }

url = 'http://www.google.com'
headers = {
    'User-Agent': 'My User Agent 1.0',
    'From': '[email protected]'  # This is another valid field
}

data = r.get(url, headers=headers , proxies = proxies)
page_data = soup(data.text , 'html.parser')

print page_data

это ошибка, которую я получаю:

37657 Traceback (последний вызов последним): файл "ssh.py", строка 27, в файле data = r.get (url, headers = headers, proxies = proxies) "/usr/lib/python2.7/ site-packages / requests-2.19.1-py2.7.egg / requests / api.py ", строка 72, в запросе получения возврата ('get', url, params = params, ** kwargs) File" / usr / lib / python2.7 / site-packages / requests-2.19.1-py2.7.egg / requests / api.py ", строка 58, в запросе return session.request (method = method, url = url, ** kwargs ) Файл "/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/sessions.py", строка 512, в запросе resp = self.send (prepare, ** send_kwargs) Файл "/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/sessions.py", строка 622, в send r = adapter.send (request, * * kwargs) Файл "/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/adapters.py", строка 507, при отправке поднять ProxyError (e, request = request ) requests.exceptions.ProxyError: HTTPConnectionPool (host = '127.0.0.1', port = 80): Макс. s превышено с URL: http://google.com/ (вызвано ProxyError ('Невозможно подключиться к прокси.' , NewConnectionError (': Не удалось установить новое соединение: [Errno 111] В соединении отказано',)))


person Ion Pop    schedule 23.10.2018    source источник


Ответы (1)


Я думаю, вам нужно либо явно установить локальный адрес привязки в SSHTunnel, либо настроить порт для вашего прокси следующим образом:

`
https_tunnel.start()
    proxies = {
        #'http': 'http://localhost:{}'.format(str(http_tunnel.local_bind_port)),
        'https': 'https://localhost:{}'.format(str(https_tunnel.local_bind_port))
    }
`

где https_tunnel - это экземпляр SSHTunnelForwarder. Я сделал это, однако получаю ошибки при отправке запроса GET:

python2.7 / site-packages / requests / adapters.py ", строка 490, при отправке поднять ошибку ConnectionError (err, request = request) requests.exceptions.ConnectionError: ('Соединение прервано.', BadStatusLine (" '' ",) )

person Matt Calderaz    schedule 21.03.2019