大多数网站判断访问来源是通过HTTP Request Header中的Referer判断的。浏览器访问资源时,会自动附带上这个Referer字段表示用户是从那个网址访问到该资源的。在RFC 2616 超文本传输协议 HTTP/1.1中,有对它的详细描述。 当我们从外站访问这些图片时,浏览器自动在Header中Referer字段提供了当前的网址,那么对方服务器一判断,不是从自己网站访问的,自然就拒绝显示了。 curl:自由获取任意资源 为了破解这种限制,自然要请来强大的curl。让我们来看具体代码: function fetch_image($url) { $curl = curl_init($url); //初始化 curl_setopt($curl, CURLOPT_HEADER, FALSE); //将结果输出到一个字符串中,而不是直接输出到浏览器 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //最重要的一步,手动指定Referer curl_setopt($curl, CURLOPT_REFERER, 'http://mp.weixin.qq.com'); $re = curl_exec($curl); //执行 if (curl_errno($curl)) { return NULL; } return $re; } 设置CURLOPT_REFERER这个属性是最关键的一步。 <img src="http://fetch_image_api/?src=weixin_image_url" alt="" /> 意思就是服务端伪造Referer,通过自己服务器来中转,获取图片。
大多数网站判断访问来源是通过HTTP Request Header中的Referer判断的。浏览器访问资源时,会自动附带上这个Referer字段表示用户是从那个网址访问到该资源的。在RFC 2616 超文本传输协议 HTTP/1.1中,有对它的详细描述。
当我们从外站访问这些图片时,浏览器自动在Header中Referer字段提供了当前的网址,那么对方服务器一判断,不是从自己网站访问的,自然就拒绝显示了。
curl:自由获取任意资源
为了破解这种限制,自然要请来强大的curl。让我们来看具体代码:
设置CURLOPT_REFERER这个属性是最关键的一步。
意思就是服务端伪造Referer,通过自己服务器来中转,获取图片。