惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
The Cloudflare Blog
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
T
The Blog of Author Tim Ferriss
D
Docker
L
LangChain Blog
Vercel News
Vercel News
C
Check Point Blog
博客园 - Franky
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
人人都是产品经理
人人都是产品经理

🛫Qifei's Blog

通过 CC Switch 将 OpenAI 订阅额度接入 Claude Code、Hermes 与 OpenClaw 新版 Shadowrocket 配置 Tailscale,实现 iPhone、iPad 与 Mac mini 远程互联 FlyBlogAdmin:为 Hexo 打造的无数据库博客管理后台 - 🛫Qifei's Blog 用 Multica 和 Git worktree 实现多 Agent 并发开发 Markdown 格式示例大全 - 🛫Qifei's Blog Python的模块构建和调用方式 - 🛫Qifei's Blog 如何选择搭建梯子用的VPS? - 🛫Qifei's Blog Hexo博客页面引入足迹地图 - 🛫Qifei's Blog 机器学习和scikit-learn库基础学习笔记 - 🛫Qifei's Blog 利用国内服务器加速v2ray访问速度和规避检查 - 🛫Qifei's Blog Matplotlib_Bar3d绘制彩色带颜色标尺的3D柱形图 - 🛫Qifei's Blog Linux后台运行nostr虚荣公钥的挖掘 - 🛫Qifei's Blog Hexo博客添加Nostr_NIP-05认证 - 🛫Qifei's Blog Nostr_NIP-05认证服务简介和配置 - 🛫Qifei's Blog Onedrive_API大文件上传记录 - 🛫Qifei's Blog 反爬虫-如何检测有没有使用Puppeteer - 🛫Qifei's Blog Vuejs学习笔记 - 🛫Qifei's Blog OpenOffice连接Mysql数据库 - 🛫Qifei's Blog 安卓ToyVPN服务端从零开始读 - 🛫Qifei's Blog 在控制器中用JS验证CSS_Selector和Xpath - 🛫Qifei's Blog RWTH自习室自动预定程序(RWTH_Lernraum) - 🛫Qifei's Blog RWTH自习室自动预定程序(RWTH_Lernraum) - 🛫Qifei's Blog 如何利用Selenium实现更加高效的爬虫 - 🛫Qifei's Blog Python如何准确的计算Http请求中的Content_Length - 🛫Qifei's Blog Selenium-Webdriver接口 - 🛫Qifei's Blog
破解图片等资源跨域和防盗链阻拦 - 🛫Qifei's Blog
Qifei · 2021-02-26 · via 🛫Qifei's Blog

如果A站点想将B站点的img等资源放到A站点,通常会受到对方站点防盗链的阻拦。这里是我提供的一个思路,利用腾讯云函数的免费资源,完美绕开防盗链。因为图片不会受到浏览器的跨域阻拦,其他资源的跨域问题也能通过这个方法解决。

1:什么是防盗链?

防盗链是由对方站点设置的,防止未受许可的站点直接引用对方站点的资源。比如这里有一个 ​https://www.baidu.com/abc.jpg​ 图片链接,如果你想将它放到 ​www.yourweb.com 站点的img标签src中,将受到防盗链的阻挡,浏览器将无法加载此图片。

防盗链是因为浏览器在发起跨域请求时携带了,referrer请求头,此请求头含有你的站点主机,对方识别到你非许可站点,因此拒绝返回给你图片资源。

我在网上找了一些解决防盗链的办法,比如,设置meta标签为no-referrer,使用iframe,反向代理等。其中,针对B站防盗链的meta标签无效,iframe过于臃肿,不适合设置,而反向代理则需要一台服务器,价格不美丽,我直接用别人网站上的资源,不就是为了白嫖吗?

对此我找到了一个,免费破解防盗链的方法。

2:破解防盗链

我在腾讯云函数上写了一个python程序,此程序,将图片资源直径转为base64数据,然后返回给请求者。

为什么腾讯云函数?

腾讯云函数每个月有免费的额度,其中100万次api调用,40万GBs的函数运行时长(1GBs表示,内存1GB运行1秒),还有大概几个G的外网流出流量。这美丽的免费量,足够我们做图片代理了。

为什么转base64?

首先,腾讯云函数不支持直接返回二进制或者图片资源,它只能返回纯字符串文本,或者json格式的字符串。python可以利用base64库,将图片转为base64字节流,然后对其解码生成字符串。

除此之外,base64格式的字符串可以直接放入img标签的src中,而无需再转为blob。

python代码:

1
2
3
4
5
6
7
8
9
10
11
12
import requests
import base64
from io import BytesIO
import os

#返回一个字符串,可直接放到img标签src中
#img\_url图片的url
def getImgtoBase64(img\_url):
resp = requests.get(img\_url)
img\_bytes=base64.b64encode(BytesIO(resp.content).read())
img\_str = img\_bytes.decode()
return 'data:image/'+os.path.basename(img\_url)+';base64,'+img\_str

这里只有关键代码,如何通过云函数api向云函数中传入imgurl,需要额外的程序,比如post请求中添加url参数,或者get请求参数中放入unicode编码后的url。

更多的解决办法,需要自行了解云函数。因为我的imgurl是直接在python程序中通过爬虫爬取的,没有通过前端发送imgurl所以没有再贴出来。这里贴出一些云函数的可能返回方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#前端请求时将url编码
#通过get请求传入imgurl参数,https://serverless-api.com/?imgurl=www.baidu.com%2fabc.jpg
def main\_handler(event,context):
if('imgurl' in event['queryString']):
imgurl = event['queryString']['imgurl']
#TODO 将imgurl进行url解码
#imgurl\_decoded=
img\_str = getImgtoBase64(imgurl\_decoded)
#返回json格式的内容
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {'Content-Type': 'application/json','Access-Control-Allow-Origin':'\*'},
"body": {'imgstr':img\_str}
}

如果不是图片资源,加入Access-Control-Allow-Origin 可以解决跨域问题。