我正在尝试在代理上使用urllib2来废弃不能直接使用的网页(它在远程服务器的本地网络中运行,并且无法从外部访问)。我更喜欢的代理是一个SSH SOCKS代理(如果你运行ssh -D 9090 server
就像你得到的那样),因为我可以访问它,因为它相当安全。
我已经找到了paramiko
,但我发现所有内容都指向通过SOCKS运行SSH连接,这与我实际上要在这里完成的工作相反。
我见过Transport类,但这只是哑转发,并没有提供一个很好的OpenSSH-SOCKS代理接口,我可以用SocksiPy(等)锁定。
Net::SSH::Socks for Ruby正是我用错误的语言寻找的东西。 Python中是否有可通过SSH提供代理的东西?
答案 0 :(得分:0)
我有一个适用于抓取的解决方法。我没有尝试使用SSH连接,而是使用远程shell来提取数据:
from bs4 import BeautifulSoup
import paramiko
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('example.com', username='Oli', look_for_keys=True, timeout=5)
stdin, stdout, stderr = ssh.exec_command('/usr/bin/wget -qO- "%s"' % url)
soup = BeautifulSoup(stdout)
ssh.close()
这不是我想要开始的(我仍然非常想看看是否有通过SSH连接SOCKS套接字的方法)但是它的简单性有一些优雅。