php 抓取网页生成图片(如何利用referer来进行防图片盗链的呢?)
优采云 发布时间: 2021-12-18 00:06php 抓取网页生成图片(如何利用referer来进行防图片盗链的呢?)
写这个文章主要是因为我之前在知乎上的回答,没想到引起了这么多朋友的关注:
其实代码很简单,一上手就应该搞定。所以前高手关闭了这个文章,谢谢!
这个问题在 16 年时得到了回答,但今天仍在使用和咨询。我优化了代码,写了这个文章。
1 防盗的原理是什么?
当客户端(浏览器)从服务器请求内容时,它会提交一个标头。这个header收录了浏览器信息、cookies等内容,所以有一个referer叫做referer,也收录在里面。
推荐人是做什么用的?
它告诉服务器谁是请求的来源。比如从A页跳转到B页,那么B页收到的referer就是A页。
但图片与此有点不同。图片是在html页面加载后加载的,所以图片接收到的referer不是网页的上一页,而是当前页面。
说了这么多,别上当了。简单的一点是:对于图像,接收到的引用是引用图像的页面的 URL。
那么现在很多网站是如何使用referer来防止图片盗链的呢?
在三种情况下允许引用图像:
这个网站。当没有推荐人信息时。(服务器认为是浏览器直接访问的图片的URL,所以在这种情况下可以正常访问) 授权的URL。2 如何绕过反水蛭链?
上面介绍了3种获取图片的方法。方法一和方法三能实现吗?肯定不是,所以我们只能从方法2开始。
要擦除请求头中的信息,客户端(浏览器中的网页)无法工作,只能从服务器启动。
大体思路如下:
接下来,我们要做的就是做好转运:
您必须首先拥有一台服务器(空间或虚拟主机都可以)。选择你熟悉的语言(php nodeJs java python都可以)。开始写代码。把它放在首页并使用它。3 开始写代码
先从头开始吧,代码很简单,不要有心理压力。我以PHP为例(这两年一直在玩nodejs,PHP降温很快,昨天不得不处理一些复杂的图片,发现PHP在这方面容易一些)。
A 首先定义一个页面抓取功能。有了它,你就可以获取和发布网页,当然,当你能够捕捉图片时,你会需要它。我在原来的基础上优化了一下:
在这种情况下,如果有数据提交,它会自动发布,如果没有数据提交,它会获取。
这个函数写好后,把php文件放在最后,然后直接调用。
B 写主体部分,处理一些错误的情况。
以上部分主要是处理引用图片时出现错误的情况。一种是图片的真实URL没有告诉服务器,另一种是图片的真实地址无法访问。在这两种情况下,错误信息都会以图片的形式输出。
./fonts/hwxh.ttf 这个是字体,放在相对路径下对应的位置,或者不需要这个,直接复制系统字体中的字体名称即可。
C做了这么多准备工作,业务刚刚起步,开始抓图输出:
好无语,前面这么多东西,真东西才3行??
是的,你没看错,就是这样。当然,你可以在图片上加水印什么的,让它更有特色。
4 最终代码
完成后,代码如下:
5 最终检查
我成功地将图片传输到了本地本地主机上的图片(这是带有反水蛭的 网站)。
6 小贴士
使用您自己的服务器进行传输。如果目标图片太大,那么小水管服务器肯定受不了。pixabay最大尺寸的图片最大是几M甚至几十M,加载速度会很慢很慢,所以你可以把php的执行时间设置的更长一些。
同时,如果服务器的带宽很小,建议不要随意向别人开放你的接口,影响自己网站。
7 源代码共享
44886/imgBridge
上面这个地址,php版本已经更新了,nodejs版本不想改了,就按照这个思路吧。
github上的一个朋友提到gif不能移动。还没搞定,不过gif需要一帧一帧的提取出来,没那么简单。请在天亮时更新代码。