Python запрос SSH туннеля в качестве прокси - PullRequest
0 голосов
/ 24 октября 2018

Можно ли использовать запросы 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': 'youremail@domain.com'  # 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, заголовки = заголовки, прокси = прокси) Файл "/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/api.py ", строка 72, в запросе на получение возврата ('get', url, params = params, ** kwargs) Файл" /usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg / reports / api.py ", строка 58, в запросе вернуть session.request (метод = метод, url = url, ** kwargs) Файл" /usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg / reports / sessions.py ", строка 512, в запросе resp = self.send (prep, ** send_kwargs) File" /usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg / reports / sessions.py ", строка 622, в файле send r = adapter.send (request, ** kwargs)" /usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg / запросы / adapters.py ", строка 507, при отправке поднять ProxyError (e, request = request)HTTPConnectionPool (host = '127.0.0.1', port = 80): максимальное количество повторных попыток превышено с помощью url: http://google.com/ (вызвано ProxyError ('Не удается подключиться к прокси-серверу.', NewConnectionError (': не удалось установить новое соединение): [Errno 111] Отказ в соединении ',)))

1 Ответ

0 голосов
/ 22 марта 2019

Я думаю, вам нужно либо явно указать локальный адрес связывания в 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 / запросы / adapters.py ", строка 490, в запросе на повышение ConnectionError (ошибка), request = request) request.exceptions.ConnectionError: ('Соединение прервано.', BadStatusLine ("''",))

...