是否可以将ssh隧道的python请求用作代理?我怎样才能做到这一点?已经尝试过但没有成功:
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回溯(最近一次调用最后一次):文件“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)文件”/ usr / lib / python2 .7 / site-packages / requests-2.19.1-py2.7.egg / requests / api.py“,第58行,请求返回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(prep,** send_kwargs)文件“/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/sessions.py”,第622行,发送r = adapter.send(请求,** kwargs)文件“/usr/lib/python2.7/site-packages/requests-2.19.1-py2.7.egg/requests/adapters.py”,第507行,发送提升ProxyError(e,请求=请求)请求。 exceptions.ProxyError:HTTPConnectionPool(host ='127.0.0.1',port = 80):使用url:http://google.com/超出最大重试次数(由Pro引起) xyError('无法连接到代理。',NewConnectionError(':无法建立新连接:[Errno 111]连接被拒绝',)))
我认为您需要在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(错误,请求=请求)requests.exceptions.ConnectionError :('Connection aborted。',BadStatusLine(”''“,) )