Извращенный бекап Bitrix'а при помощи Curl

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Nagainos
рядовой
Сообщения: 31
Зарегистрирован: 2008-06-09 9:38:10
Откуда: в жопе алмазы...
Контактная информация:

Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение Nagainos » 2012-08-24 15:12:56

Пишу сейчас скрипт для бекапа "Битрикс: Корпоративный портал" с использованием консольного curl'а.
Опишу алгоритм: 1) Авторизуемся в Битриксе, сохраняем куку. 2) Уже сформированным GET запросом пуляем в Битрикс (запрос собрал с помощью фаербага). И по-идее должен быть профит. Но! Как выяснилось после этого запроса Битрикс еще несколько раз отвечает клиенту информируя о ходе бекапа. Если эти запросы не принимать - бекап прекращается. Собственно вопрос - каким образом можно заставить curl еще около десяти минут имитировать поведение браузера принимая GET-ответы?

Код: Выделить всё

USR='USR'
PASSWD='PASS'
SITE='http://BITRIX'
COOKIEFILE='cookies.txt'
RUNPATH=`pwd`
COOKIE=`grep 'PHPSESSID' $RUNPATH/$COOKIEFILE | awk '{ print $7; }'`

#if [ ! -e curl ]
#       then echo 'Please install cURL and run this script before' && exit 1;
#fi

curl -c $RUNPATH/$COOKIEFILE -d "AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=$USR&USER_PASSWORD=$PASSWD" $SITE/index.php?login=yes > /dev/null

echo $COOKIE
curl -b $RUNPATH/$COOKIEFILE -G -d "lang=ru&dump_file_kernel=Y&process=Y&action=start&dump_max_exec_time=45&dump_max_exec_time_sleep=0&&dump_integrity_check=Y&dump_file_public=Y&skip_mask=Y&arMask[]=/bitrix/backup&arMask[]=&max_file_size=0&dump_base=Y&dump_base_skip_stat=Y&sessid=$COOKIE" "$SITE/bitrix/admin/dump.php"
0xFF

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Nagainos
рядовой
Сообщения: 31
Зарегистрирован: 2008-06-09 9:38:10
Откуда: в жопе алмазы...
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение Nagainos » 2012-08-27 12:23:13

Извелись нынче извращенцы? :)
0xFF

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение kpp » 2012-09-02 21:41:18

Вопрос, конечно, интересный.
Думаю нужно поставить http-сниффер, выполнить все что надо через браузер, а потом проанализировать что когда кому шлет.
Задача сведется к повтору этих действий curl-ом.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Nagainos
рядовой
Сообщения: 31
Зарегистрирован: 2008-06-09 9:38:10
Откуда: в жопе алмазы...
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение Nagainos » 2012-09-03 10:41:01

Про сниффер - уже =) Иначе не получил-бы таких сведений.
Вся проблема в том что нужно поддерживать связь с http-сервером и отвечать на его ответы, в противном случае бекап не пройдет.
Вопрос заключается в том как это сделать.
0xFF

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение kpp » 2012-09-04 9:43:36

Что-то я не пойму: если есть сниффер, можно посмотреть что нужно чтобы "поддерживать связь" и повторить это curl-ом.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Nagainos
рядовой
Сообщения: 31
Зарегистрирован: 2008-06-09 9:38:10
Откуда: в жопе алмазы...
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение Nagainos » 2012-09-04 11:18:31

Код: Выделить всё

Авторизуемся, сохраняем куку:
POST: AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=login&USER_PASSWORD=pass&Login=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F&sessid=0397851b8ee611db37134ba9029020da
REPLY: Возвращается страничка с опциями бекапа.

Делаем запрос с параметрами бекапа
GET:
action=start
arMask[]=/bitrix/backup
arMask[]=
dump_base=Y
dump_file_kernel=Y
dump_file_public=Y
dump_integrity_check=Y
dump_max_exec_time=45
dump_max_exec_time_sleep=0
lang=ru
max_file_size=0
process=Y
sessid=0397851b8ee611db37134ba9029020da
skip_mask=Y

REPLY: 
<div class="message">
<table cellpadding="0" cellspacing="0" border="0" class="message message-ok">
	<tr>
		<td>
			<table cellpadding="0" cellspacing="0" border="0" class="content">
				<tr>
					<td valign="top"><div class="icon-ok"></div></td>
					<td>
						<span class="message-title">Сжатие...</span><br>
						<div class="empty" style="height:5px;"></div>Файлов сжато: <b>4193</b><br>Размер файлов: <b>149.2 Мб </b> <br>Текущий путь: <b>/bitrix/components/bitrix/photogallery_user/templates/.default/lang/en/index.php</b><br>Затрачено времени: <b>45 сек.</b>
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</div>
		<script>
			window.setTimeout("if(!stop)AjaxSend('?process=Y&sessid=0397851b8ee611db37134ba9029020da')",0);
		</script>

GET: process=Y
sessid=0397851b8ee611db37134ba9029020da

REPLY: <div class="message">
<table cellpadding="0" cellspacing="0" border="0" class="message message-ok">
	<tr>
		<td>
			<table cellpadding="0" cellspacing="0" border="0" class="content">
				<tr>
					<td valign="top"><div class="icon-ok"></div></td>
					<td>
						<span class="message-title">Сжатие...</span><br>
						<div class="empty" style="height:5px;"></div>Файлов сжато: <b>15211</b><br>Размер файлов: <b>187.8 Мб </b> <br>Текущий путь: <b>/bitrix/components/bitrix/socialnetwork/templates/.default/result_modifier.php</b><br>Затрачено времени: <b>1 мин. 30 сек.</b>
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</div>
		<script>
			window.setTimeout("if(!stop)AjaxSend('?process=Y&sessid=0397851b8ee611db37134ba9029020da')",0);
		</script>

GET: process=Y
sessid=0397851b8ee611db37134ba9029020da
REPLY: <div class="message">
<table cellpadding="0" cellspacing="0" border="0" class="message message-ok">
	<tr>
		<td>
			<table cellpadding="0" cellspacing="0" border="0" class="content">
				<tr>
					<td valign="top"><div class="icon-ok"></div></td>
					<td>
						<span class="message-title">Сжатие...</span><br>
						<div class="empty" style="height:5px;"></div>Файлов сжато: <b>27142</b><br>Размер файлов: <b>253 Мб </b> <br>Текущий путь: <b>/bitrix/modules/idea/install/components/bitrix/idea/templates/.default/images/noavatar.gif</b><br>Затрачено времени: <b>2 мин. 15 сек.</b>
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</div>
		<script>
			window.setTimeout("if(!stop)AjaxSend('?process=Y&sessid=0397851b8ee611db37134ba9029020da')",0);
		</script>
***
GET: process=Y
sessid=0397851b8ee611db37134ba9029020da
REPLY: <div class="message">
<table cellpadding="0" cellspacing="0" border="0" class="message message-ok">
	<tr>
		<td>
			<table cellpadding="0" cellspacing="0" border="0" class="content">
				<tr>
					<td valign="top"><div class="icon-ok"></div></td>
					<td>
						<span class="message-title">Создание резервной копии завершено</span><br>
						<div class="empty" style="height:5px;"></div>Обработано таблиц: <b>454</b><br>Файлов сжато: <b>66225</b><br>Размер файлов: <b>4.1 Гб </b><br>Размер архива: <b>3.4 Гб </b><br>Затрачено времени: <b>16 мин. 16 сек.</b>
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</div>
		<input type="hidden" name="sessid" id="sessid" value="0397851b8ee611db37134ba9029020da" />		<script>
			EndDump();
			RefreshList();
		</script>
Нужно повторить этот диалог с серваком. Проблема в том что слабо представляю как это сделать из консоли используя curl
0xFF

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение kpp » 2012-09-04 11:49:00

Авторизируемся на сервере, сохраняя куку :

Код: Выделить всё

curl -c cookies.txt -F "USER_LOGIN=login" -F "USER_PASSWORD=pass" адрес_сайта 
Отправить параметры которые необходимо передать для начала процесса

Код: Выделить всё

curl -b cookies.txt -d "...." адрес_сайта 
Теперь в цикле с каким-то интервалом шлем "process=Y" используя ранее сохраненную куку :

Код: Выделить всё

curl -b cookies.txt -d "process=Y" адрес_сайта 
При этом парсим ответ на предмет наличия фразы "Создание резервной копии завершено".
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Nagainos
рядовой
Сообщения: 31
Зарегистрирован: 2008-06-09 9:38:10
Откуда: в жопе алмазы...
Контактная информация:

Re: Извращенный бекап Bitrix'а при помощи Curl

Непрочитанное сообщение Nagainos » 2012-09-04 13:57:34

Спасибо. На днях реализую и опубликую скрипт на форуме.
0xFF