微信图片无法使用

clipboard.png

用curl获取微信的图文消息,把img的src 用data-src替换之后,出现这个外链无法使用的提示、有什么好的解决方法吗?

阅读 2.3k
1 个回答

大多数网站判断访问来源是通过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,通过自己服务器来中转,获取图片。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进