PHP cURL无法从网站获取图像

时间:2013-05-14 16:08:47

标签: php curl

我写了一个小的PHP脚本,用于使用curl抓取图像并在本地保存它们。 它从我的数据库读取图像的URL,抓取它并将文件保存到文件夹。 之前在其他几个网站上进行过测试和工作,失败的是我正在尝试使用的新网站。 我做了一些阅读,修改了脚本但仍然没有。

请建议注意什么。

$query_products = "SELECT * from product";
$products = mysql_query($query_products, $connection) or die(mysql_error());
$row_products = mysql_fetch_assoc($products);
$totalRows_products = mysql_num_rows($products);

do {
    $ch = curl_init ($row_products['picture']);
    $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20110319 Firefox/4.0');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);

    $rawdata = curl_exec ($ch);
    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close ($ch);
    if($http_status==200){ 
        $fp = fopen("images/products/".$row_products['productcode'].".jpg", 'w');
        fwrite($fp, $rawdata);
        fclose($fp);
        echo ' -- Downloaded <a href="'.$row_products['picture'].'" target="_blank">'.$newname.'</a> to local: <a href="images/products/'.$newname.'" target="_blank">'.$newname.'</a>';
    } else {
        echo ' -- Failed to download <a href="'.$row_products['picture'].'" target="_blank">'.$row_products['picture'].'</a>';  
    }

    usleep(500);
} while ($row_products = mysql_fetch_assoc($products)); 

1 个答案:

答案 0 :(得分:1)

您的目标网站可能需要/检查各种组合。按顺序:

  • 位置。有些网站只允许引用者具有一定的价值(他们的网站或没有引用,以防止链接)
  • 网址不正确
  • 缓存数据。是的,可以检查
  • 某种身份验证

执行此操作的唯一方法是嗅探正常请求的外观并模仿它。但是,您的MSIE用户代理字符串看起来与真正的MSIE UA不同,如果我是您,我会考虑将其更改为真实副本。

你是否可以将curl输出到文件(使用输出流的setopt)并告诉我们你得到了什么错误代码,以及图像的URL?这将有助于我更精确。

此外,0并不成功 - 这是一次失败