|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 64835.7660 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
07.04.2012, 15:23
|
#1
|
Strannic.org
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
|
помогите допилить скрипт
Собственно сабж,
требуется при помощи curl авторизоваться на сайте, выдернуть страницу,
при наличии любых изменений на странице - отправить уведомление на мыло.
В кодинге не шарю - но увлекся решением такой простенькой задачки и запнулся на получении CURLINFO_CONTENT_LENGTH_DOWNLOAD
Может быть я не верный метод выбрал для получения данных о странице, потому что результат постоянно меняется на пару байт, даже если страница не менялась.
PHP код:
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/default.asp"); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=update&login=root&passwd=qwerty"); curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); $result = curl_exec($ch); curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/start.asp"); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); $result = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); echo $info['download_content_length']; // здесь смотрим какой размер получаем // и он всегда разный что не годится ?>
Как можно еще получить данные о странице для сравнения ? и как потом эти данные сохранять для последующего сравнения ? и еще дописать код для отправки в случае изменений на мыло
__________________
No cyber wars and all wars... ( Strannic)
Последний раз редактировалось Strannic; 07.04.2012 в 15:37.
|
|
|
07.04.2012, 15:37
|
#2
|
Читатель
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
|
download_content_length будет всегда разный ибо данные могут приходить с сжатием + в хидерах запросто может быть динамическая инфа вроде времени и прочего.
Насчет отслеживания изменений, то тут зависит от того, есть ли на странице динамические элементы (как пример - внизу может быть время генерации страницы, время логина юзера, хэш сессии в коде страницы, динамический яваскрипт, или еще какой незаметный изменяющийся элемент).
Если страница статична - просто грузишь body без заголовков, хешируешь любым способом (md5 например), запоминаешь хэш и с ним потом сравниваешь.
Если динамика - то уже надо выдирать интересующую и 100% статичную (меняющуюся только при изменении всей страницы) часть, которую необходимо отслеживать, регуляркой и также хешировать \ сравнивать.
Можно еще попробовать заморочиться на заголовки типа last-modified, но тогда ты зависишь от сервера, который запросто может тебя наипать, и все равно придется сравнивать реальные изменения на странице.
|
|
|
07.04.2012, 15:39
|
#3
|
Strannic.org
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
|
ТС
время последнего редактирования тестил, не канает - сервер отдает "-1"
страница динамичная, значит придется ковырять кусок который интересует получается.
__________________
No cyber wars and all wars... ( Strannic)
|
|
|
07.04.2012, 15:48
|
#4
|
ё
Регистрация: 26.10.2011
Сообщений: 1,520
Бабло: $311895
|
я бы полученный контент паковал в base64encode и сравнивал потом. а так да, лучше всего курлом это делать
|
|
|
07.04.2012, 16:00
|
#5
|
Strannic.org
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
|
ТС
нашел в исходном коде страницы нужную информацию для отслеживания, подскажите каким кодом происходит выборка этой инфы при помощи регулярки ( сама регулярка уже имеется)
и непосредственно кодирование ?
__________________
No cyber wars and all wars... ( Strannic)
|
|
|
08.04.2012, 05:06
|
#6
|
Senior Member
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
|
в курле не силен, но может этот код будет выводить одинаковое кол-во байтов. ну и что, что страница динамически генерируется, она должна оставаться не изменной, если на ней нет времени и т.п. вещей.
echo strlen($result);
|
|
|
08.04.2012, 05:16
|
#7
|
Senior Member
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
|
PHP код:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/default.asp");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=update&login=root&passwd=qwerty");
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/start.asp");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
curl_close($ch);
if (CURLE_OK == curl_errno($ch)) {
echo strlen($result); // здесь смотрим какой размер получаем
// и он всегда ОДИНАКОВЫЙ что годится?
}
else {
echo 'error';
}
?>
Последний раз редактировалось Painkiller; 08.04.2012 в 05:28.
|
|
|
08.04.2012, 05:38
|
#8
|
Senior Member
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
|
PHP код:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/default.asp");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=update&login=root&passwd=qwerty");
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/start.asp");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
if (CURLE_OK == curl_errno($ch)) {
echo strlen($result); // здесь смотрим какой размер получаем
// и он всегда ОДИНАКОВЫЙ что годится?
}
else {
echo 'error';
}
curl_close($ch); //закрывать сессию нужно после проверки на ошибки, скорей всего..
?>
|
|
|
08.04.2012, 13:25
|
#9
|
очень злой, очень плохой
Регистрация: 09.04.2007
Сообщений: 230
Бабло: $19860
|
PHP код:
$GrabStart = ""; // от куда грабим
$GrabEnd = ""; // до куда грабим
$GrabData = eregi("$GrabStart(.*)$GrabEnd", $content, $DataPrint);
print_r($DataPrint);
|
|
|
08.04.2012, 22:32
|
#10
|
Strannic.org
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
|
ТС
Цитата:
Сообщение от Painkiller
PHP код:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/default.asp");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=update&login=root&passwd=qwerty");
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.test.ru/start.asp");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
if (CURLE_OK == curl_errno($ch)) {
echo strlen($result); // здесь смотрим какой размер получаем
// и он всегда ОДИНАКОВЫЙ что годится?
}
else {
echo 'error';
}
curl_close($ch); //закрывать сессию нужно после проверки на ошибки, скорей всего..
?>
|
выдает "error"
__________________
No cyber wars and all wars... ( Strannic)
|
|
|
|