Апр 9

Уроки по PHP: «CURL, делаем автоматический постер в BobrDobr.ru»

Рубрики: Php Метки: , ,  Количество просмотров: 14 073

Все знают, что социальные закладки превратились в линкопомойки, уже написано более десятка автоматических постеров, которые засирают базу соц. закладок ссылками на ГС и ГБ. Напишем и мы еще один ;)

Цель: Используя функции библиотеки CURL сделать искусственный HTTP POST запрос, авторизироваться, сохранить соц. закладку, и в целом показать как обычно делаются автоматические постеры.

bobrДа, у бобрдобра есть API для постинга закладок, но я усложню себе задачу, и с имитирую заход из браузера, введу программно логин и пароль, заполню поля для сохранения закладки.

Сперва нужно посмотреть, как соц. закладка добавляется вручную, и проследить за этим процессом Http сниффером (я использую плагин для FIrefox – HttpFox), а затем воспроизвести программно.

1. Набираем в браузере адрес http://bobrdobr.ru/

2. Вводим логин и пароль, смотрим сниффер. Видим главное:

  1. Отправлять POST запрос нужно на адрес http://bobrdobr.ru/login/
  2. POST данные выглядят следующим образом:

    username=%ЛОГИН%&password=%ПАРОЛЬ%&remember_user=on&next=%2F

  3. При успешном входе сервис пересылает нас ч-з 302-редиррект на главную страницу.

login3. Кликаем по ссылке «Добавить закладку», получаем диалог, в котором вводим все данные и жмем «Сохранить».

post

Аналогично как и во втором пункте я с помощью сниффера получаю следующую информацию:

  1. Отправка POST данных идет на ссылку: http://bobrdobr.ru/new_bookmark.html
  2. Программисты ДоброгоБобра посчитали что смогут спастись от спамеров тем, что будут автоматически генерировать некий код… но не предусмотрели, что его можно выпарсить из html кода. Имеем ввиду вот эту строчку, ее нужно считать:
    <input type="hidden" name="killspammers" value="055C5507560701013A040C0557"/>
  3. Ну и напоследок POST данные имеют следующий вид:

    killspammers=530154500556000F6F52550000&url=%ССЫЛКА%&name=%ЗАГОЛОВОК%&tags=%ТЕГИ%&description=%ОПИСАНИЕ%&add_bookmark_submit=Сохранить

Теперь, когда механизм сохранения закладки для меня ясен, я начинаю программировать.
Каждую строчку я прокомментировал, надеюсь понятно. Вбивайте свои логины и пароли на БобрДобр и пробуйте, все работает.

<?php

	// Ваши логин и пароль в бобрдобр
	$login = 'ваш логин';
	$pass = 'ваш пароль';

	// Данные для постинга
	$url = "http://www.google.com/";
	$name = "Это гугл, чтобы не забыть!";
	$tags = "Поисковая система, Супер-пупер";
	$content = "Это содержимое";

	// Создаем подключение
	if( $curl = curl_init() ){

		// Нужно загрузить главную страницу бобра
		curl_setopt($curl,CURLOPT_URL,'http://bobrdobr.ru/');

		// Нужно помнить кукисы!
		curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE);
		curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile");

		// Скачанный код возвращаем в переменную а не в поток
		curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

		// "Следовать туда, куда зовут". Если сервис выдает 302 код, мы следуем по этой ссылке
		curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);

		// Таймаут, если сервис не отвечает больше 30 секунд, выходим
		curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30);

		// Активируем GZIP сжатие трафика
		curl_setopt($curl,CURLOPT_ENCODING,'gzip,deflate');

		// Соврем Бобру, напишем в юзер-агент неправду
		curl_setopt($curl,CURLOPT_USERAGENT,'Бобр - дурак');

		// Если все ок, в $html вернется html код главной страницы
		if( $html = curl_exec($curl) ){

			// Указываем куда отправлять запрос
			curl_setopt($curl,CURLOPT_URL,'http://bobrdobr.ru/login/');

			// Указываем подключению, что слать нужно не GET (по умолчанию), а POST запросы
			curl_setopt($curl,CURLOPT_POST,TRUE);

			// Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
			curl_setopt($curl,CURLOPT_POSTFIELDS,"username=$login&password=$pass&remember_user=on&next=%2F");

			// Если все ок, в $html вернется html код главной страницы
			if( $html = curl_exec($curl) ){

				// Парсим этот сложнейший код, который защищает Доброго Бобра от спама!

				if( preg_match('/\<input type=\"hidden\" name=\"killspammers\" value=\"(.+?)\"\/\>/', $html, $out) ){

					// Отправляем СПАМ!

					// Указываем куда отправлять запрос
					curl_setopt($curl,CURLOPT_URL,'http://bobrdobr.ru/new_bookmark.html');

					// Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
					curl_setopt($curl,CURLOPT_POSTFIELDS,"killspammers=$out[1]&url=$url&name=$name&tags=$tags&description=$content&add_bookmark_submit=%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C");

					if( $html = curl_exec($curl) ){

						echo 'Постинг выполнен!';
					}
				}
			}
		}									

		// Закрываем подключение, очищаем память
		curl_close($curl);
	}

?>

Вот и все. Надеюсь было интересно. Мне всегда хотелось создать свой постер в соц закладки, но подумав, я купил готовый – bposter. Думаю у них аналогично постинг и реализован.

Думаю я вас убедил, что CURL – это сила.


Я хоть лично и не пробовал, но реаламодатель говорит что качественный хостинг у компании hostlex. Ну что ж, поверим.

Строительная фирма тепловер строит круглосуточно.

Другие статьи автора

Комментарии

  1. Цитировать none

    Ну наконец-то у кого-то руки дошли написать о курле (-:
    Сам пользуюсь, а вот написать какой-то манул всё руки не доходят…
    Огромное спасибо (-:

  2. Цитировать Вернон Коди

    Классно! Мне понравилось… Жаль только, что я не программер, а то пытливый ум вместе с шаловливыми ручками меня бы далеко завели :) У меня даже базового опыта работы с PHP нет :(

  3. Цитировать AngelOfFate

    опа спасибо, очень интересный урок для меня как для начинающего, кстати а для чего вообще Curl предназначена?

  4. Цитировать Samborsky

    для чего вообще Curl предназначена?

    Для работы с http, https, ftp, sftp протоколами, и помоему еще с менее распространенными работает. Я ее только для работы с http использую в основном.

  5. Цитировать AngelOfFate

    Samborsky, то есть там все для этого необходимое? хотя не рассказывай, сам разберусь ;)

  6. Цитировать none

    Кстати, может кому-то надо, то у меня есть книжка по CURL, но на английском… литературы по курлу не то, что мало, её катастрофически мало…

  7. Цитировать AngelOfFate

    none, о если не трудно

  8. Цитировать Samborsky

    none, давай выкладывай.

    p.s. следующий урок выложу посвященный простеньким примерам.

  9. Цитировать antweb

    А не подскажешь как называется Http сниффер

  10. Цитировать Samborsky

    А не подскажешь как называется Http сниффер

    HttpFox, это плагин для Firefox

  11. Цитировать AngelOfFate

    Samborsky, полезный плагин не занл о нем, спасибо =)

  12. Цитировать Блог Виноградова Сергея. Мир наизнанку. » Archive » Первая запись или как оно было. 10 Фактов.

    [...] И еще сдесяток блоггеров (буду ставить ссылку на последнюю запись, фигли, трекбек еще никто не отменял): Маул, Саша, Пузат, Степан, Женя [...]

  13. Цитировать antweb

    На хостинге дополнительные библиотеки CURL должны стоять?

  14. Цитировать Samborsky

    На хостинге дополнительные библиотеки CURL должны стоять?

    Да, точней это не дополнительные библиотеки, php_curl – это один модуль.
    Я думаю он на любом платном хостинге стоит по дефаулту, т.к. библиотека используется в любом более-менее серьезном скрипте.

  15. Цитировать antweb

    Да вот на VDS не оказалось, спасибо щас буду ставить тогда

  16. Цитировать Samborsky

    Ставь, тем более я сегодня после обеда выложу две вкуснейшие утилиты, без curl они не будут работать

  17. Цитировать АВМастер

    Евгений можно сказать спалил тему как авторизироваться на сайтах и делать там что угодно, теперь все начнут свои автопостеры клепать. Осталось спалить тему как капчи отсылать и получать разгаданные с помощью антикапчи (хотя и эта тема уже спалена, если поискать) и появится новый полностью автоматический сервис по автореги мыла, регистрации акков на соц закладках и постинг самих закладок. Интересно кто же первый сделает такой полностью автоматический сервис? BPoster? А может Вы Евгений? Хотя он будет немало времени забирать, т.к. придется мониторить изменения на закладках, бороться с антиботовыми скриптами и т.п.

  18. Цитировать Morfin

    Спасибо. Полезный код я как раз подобное на C++ собираюсь написать(тоже с CURL)

  19. Цитировать paradox

    привет. вот у меня вопрос. как мне сохранить динамическую капчу? у нее вид ссылки
    допустим _site.ru/captcha.jsp?key=21f3f2 и она при каждом обращении меняется.

  20. Цитировать Samborsky

    paradox

    Если один раз ее можно скачать, то ведь картинку можно сохранить локально? Так ведь?
    А потом показывай сохраненный экземпляр где хочешь

  21. Цитировать Андрей

    А чем библиотека от фреймворка отличается?
    И еще один вопрос: можно ли сделать этот скрипт без if?

    Заранее спасибо!

  22. Цитировать Samborsky

    Библиотекой называют какой-то функционал, который не позволяет программисту делать велосипеды.

    Фреймворк – совокупность библиотек, или просто очень большая библиотека.

    Это чисто мое понимание, возможно я не прав.

  23. Цитировать Андрей

    Ну то есть вместо громоздкого кода пишется пара строчек? Только библиотека узко специализирована, а фреймворк дает широкие возможности во всех областях.

  24. Цитировать Андрей

    А Curl скачаивает картинки, JS, CSS, счетчики и прочее? Или только html-код?

  25. Цитировать Samborsky

    А Curl скачаивает картинки, JS, CSS, счетчики и прочее? Или только html-код?

    Только html и ничего более, это же не браузер.
    Укажешь ссылку на картинку, скачает картинку

  26. Цитировать Александр

    Здравствуйте. Не могли бы Вы мне подсказать одну вещь?
    К curl’у в принципе не относится, но к бобру относится))
    При регистрации в бобре спрашивают ввести капчу.. Вот как эту капчу возможно достать? То есть получить прямую ссылку, ведь там как я понял создаётся сессия.. Через httpfox понятно.. А так даже не знаю..
    Если поможете – буду очень благодарен!
    Спасибо.

  27. Цитировать Артем

    Евгений, я немножко не понял после логина. Вернее с функцией preg_match, ведь она ищет этот тайный код на странице, в которой его нету, мы же должны переходить на new_bookmark.html и там уже его искать, разве не так?

  28. Цитировать Серж

    Артем

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

  29. Цитировать Сергун (dem)

    Статья классная, вот пытаюсь написать подобное, только регилку, застрял на капче.
    Теперь жду, может у вас статья про регу с капчёй здесь появится скоро

  30. Цитировать Олег

    К сожалению, данный скрипт уже не работают. Видимо программисты усердно борятся со спаммерами.

  31. Цитировать Zircool

    Скрипт, отлично работает.. Нужно только лишь, изменить структуру POST запроса, при добавлении закладки

    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
    curl_setopt($ch,CURLOPT_POSTFIELDS,"url=".$url."&name=".$article_name."&tags=".$tags."&description=".$desc.".+&next=http%3A%2F%2Fbobrdobr.ru%2Fpeople%2F".$name."%2F&killspammers=$out[1]&submit=%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C");

    $url – URL
    $article_name – Имя закладки
    $tags – теги
    $desc – описание закладки
    $name – логин
    $out[1] – защита от спамеров

    Samborsky, у меня один вопросик, если будет свободное время пожалуйста ответь..

    Хост выдает следующую ошибку

    Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/strlenc/public_html/xxx.com/xxxx/index.php on line 28

    Хостер сказал что они не поддерживают open_basedir, это не безопасно.. Как еще можно выполнить перенаправление по 302 коду?

  32. Цитировать Free0N

    Хост выдает следующую ошибку

    Хостер сказал что они не поддерживают open_basedir, это не безопасно.. Как еще можно выполнить перенаправление по 302 коду?

    Сдается мне, что там написано – CURLOPT_FOLLOWLOCATION не может быть активировано, если активен safe_mode или установлен open_basedir
    Хотя… Может неправда? =)

  33. Цитировать Free0N

    ЗЫ: по идее, такое лечится с помощью

    ini_set('safe_mode','off');
    ini_set('open_basedir','');

  34. Цитировать Zircool

    Free0N, спасибо..попробую..

  35. Цитировать borN_free

    А не поможите ли мне понять как запостить в свой блог курлом на blogs.mail.ru и на ya.ru??
    Начнем с того что я не могу точно определить какие поля формы отправлять. Залогиниться то получилось.

    Спасибо

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