【问题标题】:Flask proxy server烧瓶代理服务器
【发布时间】:2021-04-23 19:15:08
【问题描述】:

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

我找到了以下code:

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 和图像?这不可能吗?

【问题讨论】:

标签: python flask http-proxy


【解决方案1】:

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

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

【讨论】:

  • 我明白了。例如,对于 google 页面,一个 GET 请求来自 localhost (GET http://localhost:5000/logos/doodles/2021/celebrating-the-letter-n-6753651837108360.2-l.png 500 (INTERNAL SERVER ERROR))。不知道该怎么做,就像你说的那样,重复所有的要求。任何帮助表示赞赏,谢谢!
  • 查看@marcus-aurelianus 评论。有一个有趣的要点。
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多