Загрузить изображение из SSL с помощью curl? - PullRequest
5 голосов
/ 18 февраля 2011

Как загрузить изображение с curl (https site)?

Файл сохранен на моем компьютере, но почему он пуст (0 КБ)?

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 ]

6 голосов
/ 18 февраля 2011
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

на самом деле должно быть:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

, поэтому curl знает, что он должен возвращать данные, а не выводить их.

Кроме того, иногда вам приходится выполнять дополнительную работучтобы получить сертификаты SSL, принятые curl:
Использование cURL в PHP для доступа к сайтам, защищенным HTTPS (SSL / TLS)

РЕДАКТИРОВАТЬ:

Учитывая ваше использование, вытакже следует установить для CURLOPT_HEADER значение false, как рекомендовано Alix Axel.

Что касается SSL, я надеюсь, что вам потребуется время, чтобы прочитать предложенную мной ссылку, поскольку существует несколько различных способов обработки SSL и исправление.Рекомендуется, чтобы Аликс был в порядке, если данные не являются конфиденциальными, но это отрицательно сказывается на безопасности, поскольку заставляет CURL принимать ЛЮБЫЕ СЕРВЕРНЫЕ УСЛУГИ.

4 голосов
/ 18 февраля 2011

Вам необходимо добавить следующие опции:

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

Кроме того, установите CURLOPT_HEADER на false и CURLOPT_RETURNTRANSFER на true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...