在做博客到HTTPS的接入。

然后问题来了,有些资源,是不兹磁HTTPS的,比如一些引用的图片,脚本等等,然后遇到这些就很头疼。

当然,如果资源是静态的,可以直接放到本地服务器。

但是如果资源是动态的,或者经常更新,这个方法似乎就不怎么解决问题。

于是有个更神奇的方法,直接通过本地服务器,代理获取目标文件,然后再以HTTPS返回。

比如这个文件:http://steamsignature.com/profile/schinese/76561198069467122.png

这个是某网站生成的Steam动态签名,可以用于论坛签名等等。我放在博客的右侧小工具栏。

然后我天真的以为这货应该更上时代,用了HTTPS,然而事实是,并没有!

华丽丽的连接失败,这就不开心了。

而且这个图片是实时生成变化的,会随着你最近的游戏,你是否在线等等有改动。

所以我们使用文件代理来解决这个问题~!

代码参考(五楼):http://bbs.csdn.net/topics/390877515

PHP:

<?php
header("Content-Type: text/html; charset=UTF-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pramga: no-cache");
$url = 'http://steamsignature.com/profile/schinese/76561198069467122.png';
$ch = curl_init(); //初始化
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_REFERER, '某个来路url'); //伪造来路页面
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'func');
curl_exec($ch); //执行

function func($ch, $str) {
static $s = '@';
if($s) {
$s = trim($str);
if($s) header($s);
}else echo $str;
return strlen($str);
}
?>

$url = 'http://steamsignature.com/profile/schinese/76561198069467122.png';里面的内容可以替换为你自己的URL~

前面加了header头,以免某些CDN或者客户端缓存(当然这不是说CDN就不缓存了。。。看情况),强迫症使用的。

完成的效果:https://www.tutugreen.com/img/Steam/tutugreen.php

然后就可以安心放到网页中啦。

 

于是可能有小白问,这就一个文件,如果是很多文件我要一个一个创建吗?

不用滴!

可以直接修改:

$url = 'http://steamsignature.com/profile/schinese/76561198069467122.png';

改为:

$url = $_GET["url"];

这样就可以通过:http://xxx.com/a.php?url=http://www.xxxx.com/xxx.png 这样的方式进行代理。

当然实际使用的时候还要注意转义,UNICODE转换等等。


眼里有远方,心中有阳光,脚下有力量