通过Python Flask搭建简单的图片代理 绕过微信公众号图片防盗链反盗图机制
前言
微信公众号图片有较强的防盗链机制
具体表现就是网页中插入就显示“此图片来自微信公众平台,未经允许不可引用”
网上说的把“wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1”去掉就可以用全是扯淡
但有趣的是用本地浏览器直接访问图片URL是正常的
因此想到可以做一个简单的图片代理,将浏览器的图片请求经过自己的服务器中转后再返回(即将图片先取到自己的服务器上,再返回服务器上的图片)
代码
flask搭一个简单的web服务,几行代码就可以解决
import requests from flask import Flask,request import flask app = Flask(__name__) @app.route('/',methods=['POST','GET']) def GetWxImg(): imgurl =request.args.get("imgurl") print(imgurl) return flask.Response(requests.get(imgurl).content,mimetype="image/jpeg") if __name__ == '__main__': app.run(host='0.0.0.0',port=5000)
测试
测试效果如下,将微信图片套入代理服务中后,在网站上引用可正常显示
接口
搭了一个测试接口,学习使用,也不知道啥时候会崩
http://whzf.hyluz.cn:5000/?imgurl=微信图片地址
优化方向
如果服务器下载带宽不大,可以做本地缓存,将图片保存在服务器本地,并做图片索引表。收到查询请求时,先查表,如果表里有则直接在服务器本地检索图片数据。
如果服务器上传带宽也不大,可以对接图床,本地保存索引表。
对不同图片格式做区分,我这里全当jpg返回,可能浏览器原因png图片倒也可以正常显示,但是gif就不行了
如果自己站点带SSL,那么代理服务也要带SSL,flask调用证书方法见 https://hyluz.cn/?id=200