首页 > 解决方案 > 烧瓶代理服务器

问题描述

我正在尝试创建一个非常简单的代理服务器Flask。我是一个初学者,试图在这里获得基础知识。理想情况下,我希望此处的输出看起来就像您只是直接访问该站点。我不确定这是否不可能。

我找到了以下代码:

from flask import Flask
from requests import get

app = Flask(__name__)
SITE_NAME = 'http://google.com'

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def proxy(path):
    return get(f'{SITE_NAME}{path}').content

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=5000)

这几乎正​​是我想要的。输出示例(对于http://google.com在此处输入图像描述

有没有办法渲染出javascript和图像?这是不可能的吗?

标签: pythonflaskhttp-proxy

解决方案


在呈现请求 URL 时,您确实应该添加一个斜杠:f'{SITE_NAME}/{path}'。添加一个print语句,您会注意到您正在请求诸如http://google.comtextinputassistant/tia.png .

此外,代理并不是那么简单。您应该克隆客户端发送的所有请求标头并将其发送到 google.com 并在处理响应时执行反向操作。https://www.google.com/textinputassistant/tia.png检查来自and的响应有何不同https://localhost:5000/textinputassistant/tia.png,检查来自两个 URL 的请求和响应标头,您会注意到丢失了多少信息。


推荐阅读