求教转发本地应用网络请求的方法

2022-03-31 19:37:34 +08:00
 lon91ong

程序目标

用本地服务代替网络服务, 使得需要依赖网络运行的一款第三方应用能够脱机运行。

已实现的阶段目标

使用 RESTful 架构的 falcon 包实现了基本的网络请求响应,在依赖的资源文件完整的情况下,程序可以脱机运行。 但是遇到资源文件缺失,需要通过网络下载补足的情况就会报错。

问题描述

本地文件请求:GET http://127.0.0.1:8686/Download/example.zip

文件远程真实地址:GET http://down.domain.com/Download/example.zip

用什么方法能在 python 程序接收到本地文件请求时,由 python重定向连接到文件远程真实地址,并将响应数据原样发回给本地第三方应用。类似于本地应用通过代理的方式取得了文件。

用关键词redirect在 Github 搜索了一些 python 项目,没找到特别适用的。

希望大侠不吝赐教,万分感谢。

3078 次点击
所在节点    Python
26 条回复
lon91ong
2022-04-01 12:21:58 +08:00
@ec0 好了, 真的感激涕零了
macrorules
2022-04-01 12:46:42 +08:00
iptables -A PREROUTING -t nat -i eth1 -d 127.0.0.1:8686 -j DNAT --to-destination ${down.domain.com 的地址}
lon91ong
2022-04-02 22:41:51 +08:00
@macrorules 这个操作不是只能在路由器上搞吗??程序里面没听说过啊!
macrorules
2022-04-02 23:18:12 +08:00
@lon91ong 这是在本地(你的电脑,笔记本)上操作的
lon91ong
2022-04-03 20:49:25 +08:00
@macrorules 应该还要加上 Linux 系统的限制吧, Windows 没有 iptables 命令
lon91ong
2022-04-17 16:51:59 +08:00
使用 lambda 替代了 genreat 函数:
```
url ='http://down.domain.com/Download/example.zip'
resp.downloadable_as=labfile.encode("utf-8").decode("latin1") #编码问题,参见 https://github.com/Pylons/waitress/issues/318
r = requests.head(url)
resp.content_length = r.headers['content-length']
resp.content_type = r.headers['content-type']
chunk = lambda u: (yield from requests.get(u,stream=True).iter_content(chunk_size=8192))
resp.stream = chunk(url)
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844170

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX