使用curl从SSL下载图像?

时间:2011-02-18 18:57:06

标签: php ssl curl

如何从curl(https网站)下载图像?

文件保存在我的电脑上,但为什么它是空白的(0KB)?

function save_image($img,$fullpath){
    $ch = curl_init ($img);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
    $rawdata=curl_exec($ch);
    curl_close ($ch);

    $fp = fopen($fullpath,'w');
    fwrite($fp, $rawdata);
    fclose($fp);
}

save_image("https://domain.com/file.jpg","image.jpg");

2 个答案:

答案 0 :(得分:6)

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

实际应该是:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

所以curl知道它应该返回数据而不是回显它。

此外,有时您需要做更多工作才能获得curl接受的SSL证书:
Using cURL in PHP to access HTTPS (SSL/TLS) protected sites

编辑:

根据您的使用情况,您还应将Alix Axel推荐的CURLOPT_HEADER设置为false。

就SSL而言,我希望您花时间阅读我建议的链接,因为有几种不同的方法可以处理SSL,如果数据不敏感,Alix建议的修复可能没问题,但是确实否定了安全性,因为它迫使CURL接受任何服务器CERTS。

答案 1 :(得分:4)

您需要添加以下选项:

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

另外,将CURLOPT_HEADER设为false,将CURLOPT_RETURNTRANSFER设为true