Python urllib2和SSH代理--抛出未找到的404

Python urllib2和SSH代理--抛出未找到的404,python,ssh,proxy,urllib2,python-requests,Python,Ssh,Proxy,Urllib2,Python Requests,我尝试在Python的urllib2中使用SSH隧道 创建隧道: ssh -N user@machine.place.edu -L 1337:localhost:80 上述线路应在远程机器上使用端口80,在本地机器上使用端口1337 我使用了-N,因此只要this隧道正在运行,bash提示符(故意)就会挂起 在urllib2中: import urllib2 url = "http://ifconfig.me/ip" headers={'User-agent' : 'Mozilla/

我尝试在Python的urllib2中使用SSH隧道


创建隧道:

ssh -N user@machine.place.edu -L 1337:localhost:80 
  • 上述线路应在远程机器上使用
    端口80
    ,在本地机器上使用
    端口1337
  • 我使用了
    -N
    ,因此只要this隧道正在运行,bash提示符(故意)就会挂起

urllib2
中:

import urllib2
url = "http://ifconfig.me/ip"
headers={'User-agent' : 'Mozilla/5.0'}

proxy_support = urllib2.ProxyHandler({'http': 'http://127.0.0.1:1337'})
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)

req = urllib2.Request(url, None, headers)
html = urllib2.urlopen(req).read()
print html
当我运行上述代码时,
html=urlib2.urlopen(req).read()
抛出错误
urlib2.HTTPError:HTTP错误404:notfound

可能出现什么问题,我们如何解决它?


故障排除:

  • 如果关闭SSH隧道,错误将更改为
    urllib2.urleror:
    。因此,Python显然“看到”了SSH隧道
  • 如果我用
    opener=urllib2.build\u opener()替换
    opener=urllib2.build\u opener(proxy\u支持,urllib2.HTTPHandler(debuglevel=1))
    注释掉代理内容,那么
    ifconfig.me
    页面将正确下载。(当然,我正在从事的项目需要从几个不同的网络访问文档,因此我仍然需要代理才能工作。)


建议使用urllib2而不是urllib2。我不介意使用请求——我只是在这里使用urllib2,因为我不确定如何在请求中使用自定义头(例如,
用户代理
引用
)。

不幸的是,由于您是唯一可以访问
machine.place.edu
的人,其他人不可能重现这个问题

首先,尝试一下像

$ telnet localhost 1337
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET http://ifconfig.me/ip HTTP/1.0
…并在“获取”行后按几次enter键,然后查看返回的内容

如果你得到一个404,代理可能有问题


如果你得到了200分,那么你应该能够用良好的思维相当容易地重新创建它。

好的思维。我只是试着用telnet
的方式,它还抛出了一个
404
。你知道代理有什么问题吗?还有,是否有一台公共机器可以让我在上面试用,这样任何StackOverflow用户都可以复制它?@solvingPuzzles您确定绑定到localhost上端口80的
machine.place.edu
上运行的进程实际上是代理服务器吗?您是否曾在
place.edu
网络中成功使用过它?它可能只是与环回接口的连接行为不同,因此您可以尝试
ssh-Nuser@machine.place.edu-L 1337:machine.place.edu:80
在另一个界面上点击它。结果发现问题出在我使用ssh-L创建的代理上。我不知道为什么这个代理不起作用,但是上面的
pythonURLLIB2
在使用来自“免费代理在线”类网站的任意x.x.x.x:80代理时效果很好。