python - 烧瓶代理服务器
问题描述
我正在尝试创建一个非常简单的代理服务器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
和图像?这是不可能的吗?
解决方案
在呈现请求 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 的请求和响应标头,您会注意到丢失了多少信息。
推荐阅读
- google-cloud-platform - 实例的 GCE 警报策略(n1-standard-8(8 个 vCPU,30 GB 内存)
- row - Webi - 当另一列值为空时隐藏中断中的列
- yagna - 提供商发送的报价从哪里收集他们的 CPU 型号和其他数据?
- python - 通过 for 循环读写列表给出整个列表而不是列表中的每个元素
- c# - ComboBox:如果操作员键入文本,然后按回车,则发生哪个事件
- java - 无法获取 POM.xml 插件配置中提供的密码
- python - 如何使用Python将姓氏返回到前面,然后跟随名字的首字母?
- bixby - Bixby Capsule - 与现有应用程序交互?
- powershell - nuget 中 .config 文件的令牌替换(powershell 或 AzureDevOps 任务)
- compiler-construction - 使用 flex 和 bison 的编译器的 IF-ELSE 语句