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

PHP无法抓取指定站点图片但Python可正常下载,如何通过PHP实现下载?

PHP下载指定站点图片失败的解决方案

核心原因

目标站点开启了反爬虫校验,会拦截不符合规则的请求:Python的请求库默认携带了合法的客户端标识,你当前编写的PHP curl请求未配置对应的请求头参数,被站点识别为爬虫请求因此拦截,无法获取资源。

修复后可用代码

<?php

function downloadImage($img_url){
    // 图片保存路径
    $img_save_path = realpath(dirname(__FILE__)) . '/assets/upload_products/';
    // 目录不存在则自动创建
    if (!is_dir($img_save_path)) {
        mkdir($img_save_path, 0755, true);
    }
    $image_name = basename($img_url);
    $image_fullpath = $img_save_path . $image_name;

    $ch = curl_init($img_url);
    // 模拟Chrome浏览器UA,避免被识别为爬虫
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
    // 配置Referer为站点根域名,模拟从站点自身页面跳转访问
    curl_setopt($ch, CURLOPT_REFERER, 'https://www.autoopt.ru/');
    // 关闭SSL证书校验,避免HTTPS请求报错
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    $raw = curl_exec($ch);
    // 判断请求是否出错
    if(curl_errno($ch)){
        curl_close($ch);
        return false;
    }
    curl_close($ch);
    
    // 已存在则删除旧文件
    if(file_exists($image_fullpath)){
        unlink($image_fullpath);
    }
    $fp = fopen($image_fullpath, 'w');
    fwrite($fp, $raw);
    fclose($fp);
    
    return true;
}

downloadImage('https://www.autoopt.ru/product_pictures/big/bcb/054511.jpg');

主要修改点

  • 新增浏览器UA标识模拟:配置CURLOPT_USERAGENT参数模拟正常Chrome浏览器请求
  • 新增Referer请求头:配置CURLOPT_REFERER参数符合站点的访问来源校验规则
  • 新增HTTPS适配:关闭SSL证书校验,避免HTTPS请求因证书问题失败
  • 新增异常判断逻辑:增加curl请求错误校验、目录存在性校验,避免目录不存在或无权限导致的写入失败

补充说明

如果修改后仍无法下载,可以抓包获取Python正常请求时的所有请求头,通过CURLOPT_HTTPHEADER参数把所有头信息配置到curl请求中,和Python的请求头完全保持一致即可正常获取资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:03