Войдите на сайт с помощью cURL и получите с него данные (изображение) [закрыто]


Я пытаюсь получить изображение диаграммы с удаленного сайта.
Но изображение, казалось, создавалось динамически с сайта при вызове.
Он ничего не вернет, если не вошел в систему.

Это URL-адрес изображения

<img src="http://fuelbuyer.dtn.com/energy/view/energy/chart.do?width=150&height=120&chartType=0&ts=1352196066175&rackId=446&productId=179&points=8&showExtraLine=True">

Я каким-то образом сумел войти в систему с помощью этого кода и попытался отобразить изображение.
Но это не работает.

$ch = curl_init();
$url = 'http://fuelbuyer.dtn.com/energy/common/signin.do?';
$login = 'username=$USER&password=$pass&autoLogin=true&partnerId=0&partnerName=';
curl_setopt($ch, CURLOPT_URL, $url.$login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch); 

Вызов URL изображения напрямую (на адресной строке браузера только при входе в систему), даст некоторый код, как

" ‰формат PNG IHDR-xï-œGPIDATxÚílÇÇ IHKB-Uäø!Eš°Š !ÉB Iàμ©...œ€ $@S‡8 ¶ÀÀ "D2ððbr Æ'Wjax;~Äø...ç·*±; 3ýÎk×ûºÙÝ3™" þ+Ü÷v÷·3óïf¾™tqnaa@ " ém "6åÔ5}£¡k蚎i趾USž†Nh(_M'5tjc Á™°' ðN?ÿ ¼3>¾=5μîòåêõô©V¢:‰ê%º+QƒD5õ©Y" "D-Õ*Q" Dí}êS¢.‰º%2Käè " 3Û1 "βñupà'ˆ" ˆ-õéôéÓ!rBP¡Ÿï ¼ ®F "éò" " ÂOŠÐ4?G}=ŽŠ " ×ÎgdPòc!† #-[ВБ} "

Но когда называется как

<img src="http://fuelbuyer.dtn.com/energy/view/energy/chart.do?width=150&height=120&chartType=0&ts=1352196066175&rackId=446&productId=179&points=8&showExtraLine=True">

Даст правильный образ.

Я действительно не знаю, что делать дальше.

Как я могу войти на сайт с помощью cURL и выполнить это линия.
<img src="http://fuelbuyer.dtn.com/energy/view/energy/chart.do?width=150&height=120&chartType=0&ts=1352196066175&rackId=446&productId=179&points=8&showExtraLine=True">
Сайт будет перенаправлен на домашнюю страницу после успешного входа в систему.
Так что я тоже должен предотвратить перенаправление.
Сеанс будет завершен через несколько секунд.

Заранее благодарю вас,
Eugine P J

У меня получилось. Обратитесь к этому комментарию.
не удается получить данные о расписании с сайта моей школы. Войти с помощью cURL не получится

3 2

3 ответа:

Изображение, полученное с помощью cURL, является правильным (смотрите, вы получаете заголовок PNG).

Если вы хотите отобразить его на своей странице - давайте проигнорируем здесь вопросы лицензирования - вам нужно поместить свой скребковый код, выше, на своей странице, например myimage.php.

Затем в свой HTML-код вы вставляете

<img src="myimage.php" />

И в myimage.php, как только у вас есть $output, Вы просто выводите его:

<?php
$ch  = curl_init();
$url = 'http://fuelbuyer.dtn.com/energy/common/signin.do?';
$login = 'username='.$USER.'&password=$pass&autoLogin=true&partnerId=0&partnerName=';
curl_setopt($ch, CURLOPT_URL, $url.$login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
// $info = curl_getinfo($ch);
curl_close($ch); 

// Let's suppose that $content (what we want to send) is exactly equal to $output
$content = $output;
// If, instead, we have in the output something like <img src="crypto-unique.png" />"
// we will need to parse $output (using XML maybe, or, just this once, a regex)
// and get its URL, then retrieve the image using cURL again, and *this* will be our
// final $content.

// Just output
Header("Content-Type: image/png");
Header("Content-Length: " . strlen($content));
die($content);

// Or if we wanted to manipulate it, e.g. send it as JPEG at 75% quality
$gd = imageCreateFromString($content);
Header('Content-Type: image/jpeg');
ImageJPEG($gd, '', 75);
die();

?>

Для грязных деталей более сложных схем входа в систему, смотрите ответ на Как я могу выскрести содержание веб-сайта на PHP с веб-сайта, который требует входа в файл cookie?

Вам нужно сообщить браузеру, что это изображение, попробуйте добавить его в свой PHP-код:

header("Content-Type: image/png");
$ch = curl_init();
$url = 'http://img842.imageshack.us/img842/7650/pngtransparencydemonstr.png';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
echo $output;

Вы пробовали Заголовок изображения?

header("Content-Type: image/png");
header("Content-Disposition: attachment; filename=image.png" );