Войдите на сайт с помощью 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 ответа:
Изображение, полученное с помощью 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;