You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

curl/wget/file_get_contents获取JPG无效,浏览器正常,如何解决?

解决通过curl、wget或file_get_contents获取Homeaway图片的问题

我碰到过不少这类酒店房源图片的反爬情况,核心原因就是Homeaway这类网站会检查请求的User-Agent头——如果检测到是非浏览器发起的请求,就会返回无效的图片数据或者直接拒绝访问。咱们只需要模拟浏览器的请求头就能轻松解决,下面分别给你三种工具的具体解决方案:

方法一:使用curl获取

不管是命令行还是PHP代码,都需要添加浏览器的User-Agent头来模拟正常请求:

命令行版本

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" -o image.jpg https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg

PHP代码版本

$imageUrl = 'https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg';
$ch = curl_init($imageUrl);

// 设置模拟浏览器的User-Agent
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 处理可能的重定向

$imageData = curl_exec($ch);
curl_close($ch);

if ($imageData !== false) {
    // 保存图片到本地
    file_put_contents('image.jpg', $imageData);
    // 尝试创建图像资源
    $image = imagecreatefromstring($imageData);
    if ($image !== false) {
        echo '图片处理成功';
        imagedestroy($image);
    } else {
        echo '无法解析图片数据';
    }
} else {
    echo '获取图片失败';
}

方法二:使用file_get_contents获取

file_get_contents默认的请求头没有浏览器标识,咱们需要创建一个包含User-Agent的上下文:

$imageUrl = 'https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg';
$context = stream_context_create([
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\r\n"
    ]
]);

$imageData = file_get_contents($imageUrl, false, $context);

if ($imageData !== false) {
    file_put_contents('image.jpg', $imageData);
    $image = imagecreatefromstring($imageData);
    if ($image !== false) {
        echo '图片保存并解析成功';
        imagedestroy($image);
    } else {
        echo '图片数据无效';
    }
} else {
    echo '获取图片失败';
}

方法三:使用wget(增强兼容性)

虽然你说wget已经能拿到图片,但有时候网站可能会调整策略,显式指定User-Agent能确保万无一失:

wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg

补充说明

  • 这里用的Chrome浏览器的User-Agent,你也可以换成Firefox或者其他主流浏览器的标识
  • 加上CURLOPT_FOLLOWLOCATION是为了处理图片链接可能存在的重定向,确保拿到真实的图片数据
  • imagecreatefromstring比imagecreatefromjpeg更通用,能处理各种格式的图片数据

内容的提问来源于stack exchange,提问作者Aakash John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:45:22