You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sshtunnel与Python通过SSH隧道请求HTTP返回结果异常的问题

问题原因

核心差异源于HTTP请求缺少正确的Host头:

  • 远程服务器执行curl www.google.com时,curl会自动添加Host: www.google.com请求头,Google服务器能识别该域名并返回对应页面。
  • 你的Python代码请求http://localhost:8888/时,requests默认发送Host: localhost:8888,Google服务器无法匹配到对应站点资源,因此返回404错误。
修复方案

修改requests.get请求,手动添加Host请求头指定为www.google.com即可:

with sshtunnel.open_tunnel(
    (remote_server, 22),
    ssh_username="process",
    ssh_host_key=ssh_host_key,
    remote_bind_address=('www.google.com', 80),
    local_bind_address=('', 8888)
) as tunnel:
    url = f'http://localhost:{8888}/'
    # 添加Host头模拟直接请求www.google.com的请求格式
    headers = {'Host': 'www.google.com'}
    response = requests.get(url, headers=headers)
    print(response.text)

另一种可选方式是修改请求URL的主机部分为www.google.com,通过本地隧道端口访问(需确保本地DNS解析不绕过隧道,第一种方法更可靠):

url = 'http://www.google.com:8888/'
response = requests.get(url)
补充说明

SSH隧道在此处仅做端口转发:将本地8888端口的流量转发到远程服务器指向的www.google.com:80。但HTTP协议依赖Host头区分站点,即便流量到达Google服务器,无正确Host头也无法获取对应内容。

内容的提问来源于stack exchange,提问作者glades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:50:56