PHP反代Https网站图片

胜天半子 发布于 19 天前


要实现反向代理(反代)HTTPS图片的PHP代码,可以通过cURL从远程服务器获取图片并输出给用户。以下是一个基本的反代图片的PHP代码示例:

<?php
// 获取图片的URL,防止直接输入非法URL,做简单过滤
if (isset($_GET['url'])) {
    $url = $_GET['url'];

    // 验证URL是否为HTTPS并且是图片链接
    if (filter_var($url, FILTER_VALIDATE_URL) && strpos($url, 'https://') === 0 && preg_match('/\.(jpeg|jpg|png|gif)$/i', $url)) {
        // 初始化cURL会话
        $ch = curl_init();

        // 设置cURL选项
        curl_setopt($ch, CURLOPT_URL, $url); // 设置目标URL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将结果返回为字符串
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证SSL证书

        // 执行cURL请求
        $imageData = curl_exec($ch);

        // 获取HTTP响应码
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        // 关闭cURL会话
        curl_close($ch);

        // 如果请求成功
        if ($httpCode == 200) {
            // 获取图片MIME类型
            $finfo = new finfo(FILEINFO_MIME_TYPE);
            $mimeType = $finfo->buffer($imageData);

            // 设置响应头,输出图片
            header('Content-Type: ' . $mimeType);
            echo $imageData;
        } else {
            // 如果请求失败,返回404状态码
            http_response_code(404);
            echo "Image not found.";
        }
    } else {
        // 返回错误信息,说明不是合法的图片URL
        echo "Invalid image URL.";
    }
} else {
    echo "No image URL provided.";
}

代码解释:

  1. 通过$_GET['url']获取用户传递的图片URL。
  2. 使用filter_var验证URL格式,并确保它是以https://开头的图片文件。
  3. 使用cURL发送请求获取远程服务器上的图片。
  4. 获取图片后,使用finfo类判断图片的MIME类型,并将其通过HTTP响应返回。
  5. 设置Content-Type为正确的MIME类型后,直接输出图片数据。

使用方式:

将此PHP文件放在服务器上,调用时通过类似以下的URL访问:

http://yourserver.com/proxy.php?url=https://example.com/image.jpg

这样,服务器会通过PHP脚本代理获取图片并返回给用户。

遇挚友,如逢春,自此长明,天光大亮
最后更新于 2025-05-17