要实现反向代理(反代)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.";
}
代码解释:
- 通过
$_GET['url']
获取用户传递的图片URL。 - 使用
filter_var
验证URL格式,并确保它是以https://
开头的图片文件。 - 使用
cURL
发送请求获取远程服务器上的图片。 - 获取图片后,使用
finfo
类判断图片的MIME类型,并将其通过HTTP响应返回。 - 设置
Content-Type
为正确的MIME类型后,直接输出图片数据。
使用方式:
将此PHP文件放在服务器上,调用时通过类似以下的URL访问:
http://yourserver.com/proxy.php?url=https://example.com/image.jpg
这样,服务器会通过PHP脚本代理获取图片并返回给用户。