Авторизация на сайте при помощи библиотеки cUrl Продолжая цикл статей посвященный парсерам и всем, что с ними связано. В этой статье расскажу про то, как легко можно авторизоваться на любом сайте при помощи библиотеку cUrl php. Для примера я взял один Украинский портал, к которому я собственно и буду подбирать ключики. Для работы нам также понадобится библиотека simple_html_dom 

Авторизацию будем проходить на сайте http://tender.me.gov.ua , не буду создавать лишних ссылок, чтобы не накрыть нашу лавочку. 

Для начала зарегистрируйтесь на сайте, чтобы иметь тестовые логин-пароль для входа на сайт. 

На сайте мы видим ничем не примечательную форму авторизации.

Форма авторизации на сайте

"Внутренности" у нее тоже ничем не примечательны

<form id="login" name="login" method="post" action="/EDZFrontOffice/menu/uk/;jsessionid=c4651e96f5c2b9afb08776cbd1a5" enctype="application/x-www-form-urlencoded">
 <input type="hidden" name="login" value="login" />
 <input id="login:login" type="text" name="login:login" class="login" maxlength="80" />
 <input id="login:password" type="password" name="login:password" value="" maxlength="80" class="login" />
 <input type="image" src="images/t_login_button.png;jsessionid=c4651e96f5c2b9afb08776cbd1a5" name="login:j_id_id254" alt="&#1042;&#1093;&#1110;&#1076;" />
 <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
</form>

Итак смотрим, что форма авторизации отправляет при аутентификации. Для этого возпользуемся  Google Chrome, открываем в нем сайт, затем Инструменты->Инструменты разработчика. Далее переходим на вкладку Network. Для браузера Opera Меню->Страница->Средства Разработки->Open Opera DragOnFly и вкладка Сеть. Хоть я и фанат Оперы, но на мой взгляд продукт от компании Google немного удобнее. Я конечно не про браузер =)

Теперь авторизуемся на сайте, смотрим, что посылает форма при сабмите. 

Просмотр отправляемых данных в Google Chrome

Видим, что форма посылает следующие параметры

login:login
login:login:{loginmail}
login:password:{password}
login:j_id_id254.x:8
login:j_id_id254.y:7
javax.faces.ViewState:j_id1:j_id2

Попробуем решить задачу в лоб и отправить эти данные простым массивом. Сразу учтем, что данные отправляются на защищенный ssl url, по протоколу https. Это следует учитывать при отправке данных в cUrl. Рассказывать, как работает SSL в рамках данной статьи я не стану, скажу лишь, что сертификаты, которыми обмениваются две стороны, сами по себе ничего не говорят о его обладателе. Они нужны лишь для того, чтобы передать открытый ключ, обеих сторон и служат для шифрования канала связи. Т.е. мы можем проверять наличие ssl, и подключать сертификат в cUrl, но это будет служить пользу только нам, сервер не может узнать пользуемся ли мы сертификатом, или используем незащищенный канал связи.

//О том, что мы авторизовались будем судить по наличию формы logout
function isAuth( $data ){
	return preg_match('#<form[^>]+id="logout"#Usi',$data);
}
$ch = curl_init();
$url = 'https://tender.me.gov.ua/EDZFrontOffice/menu/uk/';
curl_setopt($ch, CURLOPT_URL, $url ); // отправляем на 
curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// просто отключаем проверку сертификата 
curl_setopt($ch, CURLOPT_POST, 1); // использовать данные в post
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
	'login'=>'login',
	'login:login'=>'mylogin@sitename.ru',
	'login:password'=>'password',
	'login:j_id_id254.x'=>8,
	'login:j_id_id254.y'=>7,
	'javax.faces.ViewState'=>'j_id1:j_id2',
));
echo isAuth($data = curl_exec($ch))?'Success':'Failed';
curl_close($ch);

Запускаем и видим, что ничего не получилось. Сайт просто так не сдался. Мы не учли одну вещь, данные об авторизации должны быть сохранены в cookie. Для этого добавим две строчки в код, к примеру после curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

...
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); // сохранять куки в файл 
curl_setopt($ch, CURLOPT_COOKIEFILE,  dirname(__FILE__).'/cookie.txt');
...

И снова мимо. Обратим внимание, что форма помимо стандартных логина-пароля, отправляет еще 3 динамических поля. Данные в них все время разные и генерируются при обновлении страницы. Значит, нужно загрузить страницу, скопировать эти данные и проходить аутентификацию уже с ними. Для этого немного "облагородим" код, заключив запрос данных с сервера cUrl'ом в отдельную функцию. Все отличие get запроса от post, заключается в том, что при пост запросе отправляются данные CURLOPT_POSTFIELDS

function request($url,$post = 0){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url ); // отправляем на 
	curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); // сохранять куки в файл 
	curl_setopt($ch, CURLOPT_COOKIEFILE,  dirname(__FILE__).'/cookie.txt');
	curl_setopt($ch, CURLOPT_POST, $post!==0 ); // использовать данные в post
	if($post)
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}

Попытаемся выдернуть значения переменных полей 

$data = request('https://tender.me.gov.ua/EDZFrontOffice/');
include 'simple_html_dom.php';
$data = str_get_html($data);
$auth = array(
		'login'=>'login',
		'login:login'=>'***************',
		'login:password'=>'************l',
		'login:j_id_id254.x'=>$data->find('input[name="login:j_id_id254.x"]',0)->value,
		'login:j_id_id254.y'=>$data->find('input[name="login:j_id_id254.y"]',0)->value,
		'javax.faces.ViewState'=>$data->find('input[name="javax.faces.ViewState"]',0)->value,
);
$data->clear();
unset($data);
print_r($auth);

Оказывается, что поле login:j_id_id254.x и поле login:j_id_id254.y создаются и заполняются js скриптом. Попробуем оставить их как были 

$url = 'https://tender.me.gov.ua/EDZFrontOffice/menu/uk/';
$data = request('https://tender.me.gov.ua/EDZFrontOffice/');
include 'simple_html_dom.php';
$data = str_get_html($data);
$auth = array(
		'login'=>'login',
		'login:login'=>'site@sitename.ru',
		'login:password'=>'password',
		'login:j_id_id254.x'=>10,
		'login:j_id_id254.y'=>11,
		'javax.faces.ViewState'=>$data->find('input[name="javax.faces.ViewState"]',0)->value,
);
$data->clear();
unset($data);
echo isAuth(request($url,$auth))?'Success':'Failed';;

Вот  и все, сайт побежден. Далее работаем с ним, как с обычным сайтом. Данные о том, что Ваш скрипт никто иной, как авторизованный пользователь бережно хранятся в cookie.   

Скрипт работает, но в более сложных случаях, приходиться эмулировать выполнение js скриптов, либо просто выяснять механизм их работы, чтобы заполнить те самые динамически заполняемые поля. К сожалению, этому не научишь, все зависит от конкретной задачи и изобретательности программиста. За примерами далеко ходить не надо, попробуйте для интереса создать скрипт, который бы отправлял автоматически, комментарии на xdan.ru. Желаю удачи =)

 

Рассказать друзьям
author.jpg

Платная консультация по вопросам 2500 руб/час

Прочитали статью и остались вопросы? Меня зовут Валерий и я её автор. С радостью объясню Вам в скайпе все затруднительные моменты, которые остались за рамками статьи!

Подробнее ...

Добавить комментарий


Комментарии   

Евгени
+6 # Евгени 20.07.2012 18:03
Спасибо за статью, как раз её и ждал ;)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Сергей
+6 # Сергей 18.09.2012 17:39
Спасибо очень помогло
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Сергей
+4 # Сергей 19.09.2012 22:57
пробовал сюда отправить сообщение с curl но не получилось), не смог вернуть значение из поля js_key
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
+5 # Leroy 20.09.2012 12:51
свой сайт я привел, как сайт защищенный от подобного рода деятельности. в том и фишка, у меня стоит js защита от спама. на стороне сервера генерируется js скрипт, проводиться его обфуския а затем он выполняется в браузере выдавая некий ключ, аналог которого есть на сервере. при парсинге сайта через php вы не можете выполнить js. в народе называется js капча, Очень примитивная защита, обойти которую достаточно сложно без разбора алгоритма генерации и деобфускации кода, однако и ее можно обойти. код там не сложный) Поставил ее, как только посыпались автоматические посты на сайт со всякой рекламой
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Василий
+3 # Василий 20.09.2012 21:35
А как можно выдернуть значение, которое было сгенерированно с помощью js? И вообще реально ли это сделать с помощью чистого php, или надо использовать для этих целей javascript?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 20.09.2012 21:58
либо писать изначально на парсер js либо разбираем ручками алгоритм, уверяю вас это не так сложно как кажется, делал такое и не раз. К примеру можно запустить сайт в браузере, и посмотреть в инспекторе распакованный js, что уже сильно облегчит задачу по генерации своего key
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Maria
0 # Maria 27.09.2017 10:46
В моем непростом случае ничего не помогает чтобы авторизоваться на сайте чере курл.
Как мне выяснить, что именно недает авторизации случится?
Допустим, если там есть js - key, как его вычислить? Что значит "посмотреть в инспекторе распакованный js" и как я отличу нужный мне js?)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 27.09.2017 16:14
Сперва посмотрите в инспектора во вкладке сеть/network какой запрос уходит при отправке формы, какие там поля есть. Если есть поля которые похожы на динамические, ищите где сайт их генерирует/получает, он может их с сервера запрашивать, может сам хитро генерировать. В самом js ищем код который отправляет запрос - в нем ищем место где в запрос вставляется хитры параметр, ищем вверх по коду, откуда этот параметр пришел, из формы ли взят или прислан с куками. туча вариантов. скорее всего все проще и там какая-нибудь crsf переменная из хидера, но могут и заморочиться, случаи бывают разные)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Герман
+3 # Герман 08.01.2013 21:32
Огромное спасибо! Задумал сделать один сервис, без этой статьи было бы не реализовать!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Владимир
0 # Владимир 24.01.2013 19:39
Здравствуйте, очень полезная статься, но я все же не смог сделать авторизацию на betonmarkets.com, там все данные формы передаются на cgi скрипт, но ни dragonfly ни chrome почему-то не выводят список отправленных данных формы. Подскажите пожалуйста куда копать
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
-1 # Leroy 24.01.2013 20:31
копать в сторону функций set_login_url_for_loginid и get_brokercode_from_loginid в исходниках compressed_base.js
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Yurant
-1 # Yurant 03.04.2013 12:22
Подскажите пожалуйста по какому принципу была построена строка preg_match() а конкретнее вот этот сегмент, то что после формы:



#]+id="logout"#Usi
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 03.04.2013 12:54
По принципу регулярных выражений
 preg_match('#<form[^>]+id="logout"#Usi',$data);
где
#<form[^>]+id="logout"#Usi
это регулярка, по которой находится тег form с id="logout" с флагами Usi - где U - выключаем жадность, s - игнорим пробелы, i- игнорируем регистр

В результате если в строке $data есть форма с id="logout" то preg_match вернет true, значит на странице есть форма с выходом. На вашем сайте все может быть гораздо иначе, но принцип тот же - ищем на странице то, что на ней нет до авторизации
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Yurant
0 # Yurant 03.04.2013 15:55
Благодарю, Leroy. Просто пытаюсь по аналогии с данной статьей собрать парсер к сайту, однако не могу понять почему авторизация якобы не проходит... =/

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

Голову ломаю 2й день =/
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Антон
0 # Антон 03.04.2013 16:02
function isAuth( $data )

{

return preg_match('#]+id="Authorization"#Usi',$data);

}

$ch = curl_init();

$url = 'http://www.autodoc.ru/';

curl_setopt($ch, CURLOPT_URL, $url ); // отправляем на

curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');

curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); // сохранять куки в файл

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');

curl_setopt($ch, CURLOPT_POST, 1); // использовать данные в post

curl_setopt($ch, CURLOPT_POSTFIELDS, array(

'returnUrl'=>'/',

'UserName'=>'MANGO-1344',

'RememberMe'=>'true',

'RememberMe'=>'false',

'Password'=>'QWEASDQWE',

));



isAuth($data = curl_exec($ch))?($Success=1):($Success=0);

if ($Success == 1)

{

curl_setopt($ch, CURLOPT_URL, 'http://www.autodoc.ru/Web/price/art/95659676?analog=on&access=2');

curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');

curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); // сохранять куки в файл

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');



$out = curl_exec($ch);

echo $out;

}

curl_close($ch);
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Yurant
-1 # Yurant 03.04.2013 16:07
Собственно вот сам код... В Google/.../network насколько понимаю только гет-запросы, при попытке отправить такой же гет-запрос, возвращает не совсем то.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Yurant
0 # Yurant 08.04.2013 16:20
Спасибо большое за статью, всё очень наглядно!)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
matissko
0 # matissko 01.07.2013 11:31
Статья хорошая, я как новенький в этом деле узнал много полезного для себя)



Но однако у меня не получается пройти авторизацию mail.arenda-gold.ru

Делал вроде всё по статье, но не выходит, поможет кто?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Roman
0 # Roman 14.07.2013 16:45
Добрый день! А вы не пробовали с этого же сайта качать сами тендеры?))) там табличка с записями и есть пагинация! вот никак не могу ее победить! не хочет переходить по ней всегда на первой странице находиться(
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 15.07.2013 03:05
статья написана в ознакомительных целях, ни в коем случае не претендует на руководство по парсенгу одного конкретного ресурса. Все совпадения с реальными сайтами чисто случайные.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
strongest
0 # strongest 31.07.2013 22:51
Вот сайт на котором хочу авторизоваться. Судя по POST требует кроме логина и пароля еще и значение csrfmiddlewaretoken а он находится в скрытом div. Подскажите, как вытянуть значение csrfmiddlewaretoken из скрытого div ?



И заодно на сайте Сландо не понятно каким образом происходит авторизация.

Если не затруднит вас, подскажите как разобраться с этим?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Иванbbbffffff
+4 # Иванbbbffffff 23.02.2014 03:10
А можете скрипт автопостинга на авито на php написать? С подключением антигате...
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
weq
-2 # weq 18.01.2015 23:16
Не надо спамить, нехороший вы человек.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
stdqin
-1 # stdqin 11.03.2014 06:01
Сейчас 'login:j_id_id254.x' и 'login:j_id_id254.y' нет в коде страницы. Как тогда отправить cookies?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Оlеg
0 # Оlеg 28.08.2014 15:15
Вместо этого там теперь 'login:loginButton.x' и 'login:loginButton.y'.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Alex
0 # Alex 12.07.2014 18:17
интересует такой момент

//О том, что мы авторизовались будем судить по наличию формы logout
function isAuth( $data ){
return preg_match('#<form[^>]+id="logout"#Usi',$data);



у меня после авторизации нету формы, таблицами все выстроено, как правильно написать, что бы судить по наличию этого кода на странице, что авторизация успешна

<a href="/index.php?module=SYS_users&amp;func=logout" title="Выход пользователя из системы">Выход</a>
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Alex
-3 # Alex 12.07.2014 18:20
'#<a[^>]+title="Выход пользователя из системы"#Usi'



так будет правильно?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
ooo-palaris
0 # ooo-palaris 17.07.2014 21:08
Добрый день, спасибо большое за качественный и наглядный пошаговый пример.

Делаю по вашему образцу авторизацию на др. сайте, только одно поле меняется с name="rnd", его значение вытаскиваю при помощи регулярки.. вроде все правильно, а авторизоваться не получается.. не подскажите, что не так?



Вот код:

$url4 = 'http://www.palaris-nn.ru/shop/1559331/edit';

$ch = curl_init();

@curl_setopt($ch, CURLOPT_URL, $url4);

curl_setopt($ch, CURLOPT_FAILONERROR, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$resultnew = curl_exec($ch);

preg_match_all("/name=\"rnd\" value=\"(.*)\"/isU", $resultnew, $masnew);

$perem_rnd = $masnew[1][0];

$data = array ('user' => '***', 'password' => '***', 'rem' => '1', 'a' => '2', 'ajax' => '1', 'rnd' => $perem_rnd, '_tp_' => 'xml');

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt ($ch, CURLOPT_COOKIEFILE, '/var/www/u38746/data/www/new.palaris-nn.ru/massur lphp/cooki.txt'); // Сюда будем записывать cookies, файл в той же папке, что и сам скрипт

curl_setopt ($ch, CURLOPT_COOKIEJAR, '/var/www/u38746/data/www/new.palaris-nn.ru/massur lphp/cooki.txt');

$html = curl_exec($ch);

echo $html;

curl_close($ch);
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Василий
0 # Василий 02.09.2014 03:58
Здравствуйте. Не могли бы вы поделиться конечным исходником? Просто не очень понял после всяких замен и т.п. Буду очень благодарен! Заранее спасибо :)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Радик
0 # Радик 26.11.2014 23:50
А как пройти двухфакторную аутентификацию с подтверждением номера через смс?



Встал в ступор просто.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 27.11.2014 10:32
вероятно надо найти какой-то сервис который будет принимать смс. Иначе никак
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Настульчик
0 # Настульчик 12.12.2014 17:59
При отправке заполненной формы на движке ВордПресс плагин HttpFox к файерфоксу указал на необычный параметр с именем Y3JQMTEFTYCr со значением o0uX8RxQZA9I. Что это за имя необычное? Правильным ли будет его оформление в массиве как 'Y3JQMTEFTYCr' => 'o0uX8RxQZA9I'?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
0 # Leroy 13.12.2014 14:43
похоже на какую-то динамическую переменную, защита. Надо изучать и обходить.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
murzer
-2 # murzer 14.12.2014 17:41
Пытаюсь авторизоваться по Вашей программе на одном сайте. Мне показывается, что данные отправляются GETом, а не POSTом. В чём может быть причина этого? И отправляемый заголовок Host не такой как я прописал в $url, а 127.0.0.1. Я с апачи на своём компе запускаю.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Nickkiev
0 # Nickkiev 15.08.2019 17:36
Kogo-to mozhno poprosit zapostit' finalnuj script polnostju? Zaranee blagodaren.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Валентин Валентин
0 # Валентин Валентин 24.04.2020 16:18
Статья - бомба!
Спасибо!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
перейти на сайт
0 # перейти на сайт 29.12.2020 06:01
Hi there! This post couldn't be written any better! Reading this post reminds
me of my old room mate! He always kept talking about this.
I will forward this post to him. Fairly certain he will have a good read.
Thanks for sharing!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
roulette casino
0 # roulette casino 14.01.2021 01:06
Hello Guys,
Only if you really think about casino 2021 or maybe best casino in our
web portal yo can learn more information about
casino uk here https://indaxis.com/
We have more detailed information about casino online and also about honest casino.


If you need more questions about best casino
you can find some examples please go to our site and find more and detailed info.


Please visit our website about roulette casino
or please click https://indaxis.com/

Our site have tag's: Casino usa, roulette casino,
casino 2021
And some other and guaranteed information.
Thanks for your attention.
Have a good day.

Thanks
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
гражданство доминики
0 # гражданство доминики 15.01.2021 05:06
My partner and I stumbled over here different page and thought I should check things out.
I like what I see so now i'm following you. Look forward to looking into your web page repeatedly.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
tele2 работа
0 # tele2 работа 15.01.2021 11:20
My developer is trying to convince me to move to .net from PHP.

I have always disliked the idea because of the costs.
But he's tryiong none the less. I've been using WordPress on a
variety of websites for about a year and am worried about switching to another platform.

I have heard excellent things about blogengine.net.
Is there a way I can import all my wordpress content into it?

Any help would be really appreciated!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
каталки
0 # каталки 15.01.2021 13:48
Wow, that's what I was searching for, what a information! present here at
this web site, thanks admin of this site.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
teen porno
0 # teen porno 17.01.2021 19:28
Fantastic beat ! I wish to apprentice even as you amend your website,
how can i subscribe for a weblog site? The account
aided me a appropriate deal. I have been a little bit familiar of this your broadcast offered vibrant
transparent concept
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
смотреть порно форум
0 # смотреть порно форум 18.01.2021 15:25
Hi there would you mind stating which blog platform you're using?
I'm looking to start my own blog soon but I'm having a tough time choosing between BlogEngine/Wordpress/B2evolution and
Drupal. The reason I ask is because your design seems different then most blogs and I'm looking for something completely unique.
P.S Apologies for being off-topic but I had to ask!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Cyprus prostitutes
0 # Cyprus prostitutes 19.01.2021 06:04
Hello there! This article couldn't be written any
better! Going through this article reminds me
of my previous roommate! He always kept preaching about this.
I'll send this article to him. Pretty sure
he will have a great read. Thanks for sharing!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
woodboard.kiev.ua
0 # woodboard.kiev.ua 21.01.2021 11:53
Somebody essentially lend a hand to make significantly articles I would
state. That is the first time I frequented your website page
and to this point? I amazed with the analysis you made to make this particular put
up incredible. Great activity!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
правда тут
0 # правда тут 23.01.2021 12:36
I loved as much as you'll receive carried out right here.
The sketch is attractive, your authored material stylish.

nonetheless, you command get bought an nervousness
over that you wish be delivering the following. unwell unquestionably come further formerly again since exactly the same nearly a lot
often inside case you shield this increase.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
porno foto
0 # porno foto 24.01.2021 02:03
This website was... how do I say it? Relevant!! Finally I've found something that helped me.

Thank you!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
porno film sex films
0 # porno film sex films 24.01.2021 09:28
This is my first time visit at here and i am
actually happy to read everthing at single place.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
гражданство доминики
0 # гражданство доминики 25.01.2021 14:39
You should take part in a contest for one of the
best sites on the web. I'm going to recommend this site!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
планшетов
0 # планшетов 28.01.2021 02:21
What's up colleagues, how is all, and what you wish for to say concerning this article, in my view
its in fact remarkable in favor of me.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Деньги под расписку
0 # Деньги под расписку 28.01.2021 03:36
you're truly a good webmaster. The site loading speed is amazing.

It kind of feels that you're doing any distinctive trick.
In addition, The contents are masterpiece. you've performed a magnificent
job in this matter!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Займы под залог ПТС
0 # Займы под залог ПТС 29.01.2021 23:03
What i do not realize is in reality how you are now not really a lot more well-favored than you may be now.
You're very intelligent. You understand therefore significantly in the case of this topic, made me in my view consider it from so many numerous angles.
Its like men and women are not interested until it is one thing to accomplish with Lady gaga!
Your individual stuffs outstanding. Always deal with it
up!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
сайт
0 # сайт 31.01.2021 12:23
I'm pretty pleased to find this site. I wanted to thank you
for your time just for this wonderful read!! I definitely appreciated every part
of it and I have you book marked to check out new information in your web site.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
сайт
0 # сайт 31.01.2021 12:26
Good post. I learn something totally new and challenging on websites I stumbleupon everyday.
It's always useful to read articles from other writers
and use a little something from their sites.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
viagra
0 # viagra 14.02.2021 23:47
порно смотреть - viagra
porn girls - https://gamingpost.net/ru - viagra
скачать порно viagra
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
ламинат broadway
0 # ламинат broadway 20.02.2021 13:19
Салют,
Дорогие Друзья.

Сегодня я бы хотел оповестить малость
про ламинат достоинства.


Я думаю Вы ишите именно про толстый ламинат?!
Значит эта оптимально актуальная информация
про размер ламината будет
для вас наиболее полезной.


Мы предлагаем больше инфо про ламинат золотистый и также про размер ламината и про ламинат рассчитать.


На нашем сайте больше про эконом ламинат,
также информацию про уличный ламинат и про ламинат obi.


Узнай больше про ламинат broadway или по ссылке https://rusvesna.su/aboutall/1554099841

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
окна
0 # окна 22.02.2021 07:55
Добрый День,
Дорогие Друзья.

Сейчас я бы хотел рассказать больше про компания пластиковых окон.

Я думаю Вы искали именно про оконная фирма?!

Значит эта больше актуальная информация про
оконная фирма будет для вас наиболее полезной.

Мы предлагаем больше инфо про цена окон века и также про цена окон века и про окно от производителя.



На нашем сайте больше про окна, также информацию про
окна и про окна.

Узнай больше про окна или по
ссылке https://u-news.com.ua/103203-balkon-esche-odna-komnata-osobennosti-i-sovety-po-obustrojstvu.html

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
балконы
0 # балконы 22.02.2021 11:41
Привет,
Коллеги.

Сейчас я бы хотел оповестить малость про купить балконы.


Я думаю Вы ишите именно про застеклить
балкон?! Значит эта больше актуальная информация про
балкон под ключ будет для вас наиболее полезной.

Мы предлагаем больше актуальной информации про
купить балконы и также про застеклить
балкон и про отделка балкона.


На нашем сайте больше про балконы украина, также информацию про балкон под ключ и про балкон.


Узнай больше про балконы
или по ссылке http://budport.com.ua/articles/2033-balkon-veka-komfortnoe-prodolzhenie-zhilogo-prostranstva

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Brander отзывы
0 # Brander отзывы 22.02.2021 23:56
Салют,
Друзья.

Сейчас я бы хотел оповестить больше
про отзыв Brander.
Я думаю Вы ишите именно про Brander отзывы
ua?! Значит эта больше актуальная информация про отзывы
о Brander будет для вас наиболее полезной.

Мы предлагаем больше актуальной информации про Brander ua отзывы и также про отзывы Brander и
про Brander отзыв.

На нашем сайте больше про Brander отзывы
ua, также информацию про Brander отзыв и про Brander отзыв.


Узнай больше про Brander
отзывы
или по ссылке https://mykharkov.info/catalog/brander.html

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Brander отзывы
0 # Brander отзывы 23.02.2021 00:01
Привет,
Коллеги.

Сегодня я бы хотел рассказать малость про
отзывы Brander.
Я думаю Вы искали именно про Brander ua отзывы?!

Значит эта оптимально актуальная информация про отзывы о Brander
будет для вас наиболее полезной.

Мы предлагаем больше актуальной информации про отзыв Brander и
также про отзыв Brander и про отзыв Brander.


На нашем сайте больше про отзывы
Brander, также информацию про Brander отзывы ua и про Brander отзыв.


Узнай больше про Brander отзывы или по ссылке https://it-rating.in.ua/brander

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Brander отзывы ua
0 # Brander отзывы ua 23.02.2021 00:58
Салют,
Дорогие Друзья.

Сейчас я бы хотел поведать больше
про отзывы о Brander.
Я думаю Вы искали именно про Brander отзывы ua?!
Значит эта оптимально актуальная информация про отзыв
Brander будет для вас наиболее полезной.

Мы предлагаем больше информации про отзывы о Brander и также про
отзывы Brander и про Brander отзыв.



На нашем сайте больше про Brander ua отзывы, также информацию про Brander
ua отзывы и про отзывы Brander.

Узнай больше про Brander отзывы ua или по
ссылке https://wadline.ru/brander

Удачного Дня
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
zoom купить
0 # zoom купить 24.02.2021 17:08
What a material of un-ambiguity and preserveness of valuable familiarity on the topic of unpredicted
feelings.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
my software blog
0 # my software blog 24.02.2021 21:12
Whats up this is somewhat of off topic but I was wanting to know if blogs
use WYSIWYG editors or if you have to manually code with HTML.
I'm starting a blog soon but have no coding know-how so I wanted to get advice from someone with experience.
Any help would be enormously appreciated!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
visit website
0 # visit website 25.02.2021 02:16
I blog frequently and I seriously thank you for your information. This great article has truly peaked my interest.

I'm going to take a note of your blog and keep checking for
new information about once per week. I opted in for your Feed too.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Наша команда
0 # Наша команда 25.02.2021 17:01
Hey there! I know this is kinda off topic however , I'd figured I'd
ask. Would you be interested in exchanging links or maybe guest writing a blog article or vice-versa?
My site discusses a lot of the same subjects as yours and I
feel we could greatly benefit from each other. If you
happen to be interested feel free to send me an e-mail.
I look forward to hearing from you! Fantastic blog by the way!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору