-1

我编写了一个小的 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)); 
4

1 回答 1

1

您的目标网站可能需要/检查一些事情的组合。为了:

  • 地点。有的网站只允许referer是一定的值(要么是他们的站点,要么没有referer,防止盗链)
  • 网址不正确
  • 饼干。是的,这可以检查
  • 某种身份验证

做到这一点的唯一方法是嗅探正常请求的样子并模仿它。但是,您的MSIE用户代理字符串看起来与真正的 MSIE UA 不同,如果我是您,我会考虑将其更改为真实字符串的精确副本。

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

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

于 2013-05-14T16:15:01.110 回答