помогите допилить скрипт - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD64835.7660
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 07.04.2012, 15:23   #1
Strannic
Strannic.org
 
Аватар для Strannic
 
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
По умолчанию помогите допилить скрипт

Собственно сабж,
требуется при помощи curl авторизоваться на сайте, выдернуть страницу,
при наличии любых изменений на странице - отправить уведомление на мыло.
В кодинге не шарю - но увлекся решением такой простенькой задачки и запнулся на получении CURLINFO_CONTENT_LENGTH_DOWNLOAD
Может быть я не верный метод выбрал для получения данных о странице, потому что результат постоянно меняется на пару байт, даже если страница не менялась.

PHP код:
<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/default.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"cmd=update&login=root&passwd=qwerty"); 
curl_setopt($chCURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result curl_exec($ch);
curl_setopt($chCURLOPT_URL"http://www.test.ru/start.asp");
curl_setopt($chCURLOPT_POST0); 
curl_setopt($chCURLOPT_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.
Strannic вне форума  
Старый 07.04.2012, 15:37   #2
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

download_content_length будет всегда разный ибо данные могут приходить с сжатием + в хидерах запросто может быть динамическая инфа вроде времени и прочего.

Насчет отслеживания изменений, то тут зависит от того, есть ли на странице динамические элементы (как пример - внизу может быть время генерации страницы, время логина юзера, хэш сессии в коде страницы, динамический яваскрипт, или еще какой незаметный изменяющийся элемент).

Если страница статична - просто грузишь body без заголовков, хешируешь любым способом (md5 например), запоминаешь хэш и с ним потом сравниваешь.

Если динамика - то уже надо выдирать интересующую и 100% статичную (меняющуюся только при изменении всей страницы) часть, которую необходимо отслеживать, регуляркой и также хешировать \ сравнивать.

Можно еще попробовать заморочиться на заголовки типа last-modified, но тогда ты зависишь от сервера, который запросто может тебя наипать, и все равно придется сравнивать реальные изменения на странице.
dveredel вне форума  
Старый 07.04.2012, 15:39   #3
Strannic
Strannic.org
 
Аватар для Strannic
 
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
автор темы ТС По умолчанию

время последнего редактирования тестил, не канает - сервер отдает "-1"
страница динамичная, значит придется ковырять кусок который интересует получается.
__________________
No cyber wars and all wars... (Strannic)
Strannic вне форума  
Старый 07.04.2012, 15:48   #4
Ower
ё
 
Аватар для Ower
 
Регистрация: 26.10.2011
Сообщений: 1,520
Бабло: $311895
По умолчанию

я бы полученный контент паковал в base64encode и сравнивал потом. а так да, лучше всего курлом это делать
Ower вне форума  
Старый 07.04.2012, 16:00   #5
Strannic
Strannic.org
 
Аватар для Strannic
 
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
автор темы ТС По умолчанию

нашел в исходном коде страницы нужную информацию для отслеживания, подскажите каким кодом происходит выборка этой инфы при помощи регулярки ( сама регулярка уже имеется)
и непосредственно кодирование ?
__________________
No cyber wars and all wars... (Strannic)
Strannic вне форума  
Старый 08.04.2012, 05:06   #6
Painkiller
Senior Member
 
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
По умолчанию

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

echo strlen($result);
Painkiller вне форума  
Старый 08.04.2012, 05:16   #7
Painkiller
Senior Member
 
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
По умолчанию

PHP код:
<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/default.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"cmd=update&login=root&passwd=qwerty"); 
curl_setopt($chCURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);


$ch curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/start.asp");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_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.
Painkiller вне форума  
Старый 08.04.2012, 05:38   #8
Painkiller
Senior Member
 
Регистрация: 09.01.2010
Адрес: ☭
Сообщений: 203
Бабло: $39450
По умолчанию

PHP код:
<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/default.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"cmd=update&login=root&passwd=qwerty"); 
curl_setopt($chCURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);


$ch curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/start.asp");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_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); //закрывать сессию нужно после проверки на ошибки, скорей всего..
?>
Painkiller вне форума  
Старый 08.04.2012, 13:25   #9
rulfer
очень злой, очень плохой
 
Регистрация: 09.04.2007
Сообщений: 230
Бабло: $19860
По умолчанию

PHP код:
$GrabStart ""// от куда грабим
$GrabEnd ""// до куда грабим
$GrabData eregi("$GrabStart(.*)$GrabEnd"$content$DataPrint);
print_r($DataPrint); 
rulfer вне форума  
Старый 08.04.2012, 22:32   #10
Strannic
Strannic.org
 
Аватар для Strannic
 
Регистрация: 15.12.2010
Сообщений: 2,031
Бабло: $508160
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Painkiller Посмотреть сообщение
PHP код:
<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/default.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"cmd=update&login=root&passwd=qwerty"); 
curl_setopt($chCURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_exec($ch);
curl_close($ch);


$ch curl_init();
curl_setopt($chCURLOPT_URL"http://www.test.ru/start.asp");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_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)
Strannic вне форума