Уроки по PHP: «CURL, делаем автоматический постер в BobrDobr.ru»
Все знают, что социальные закладки превратились в линкопомойки, уже написано более десятка автоматических постеров, которые засирают базу соц. закладок ссылками на ГС и ГБ. Напишем и мы еще один
Цель: Используя функции библиотеки CURL сделать искусственный HTTP POST запрос, авторизироваться, сохранить соц. закладку, и в целом показать как обычно делаются автоматические постеры.
Да, у бобрдобра есть API для постинга закладок, но я усложню себе задачу, и с имитирую заход из браузера, введу программно логин и пароль, заполню поля для сохранения закладки.
Сперва нужно посмотреть, как соц. закладка добавляется вручную, и проследить за этим процессом Http сниффером (я использую плагин для FIrefox – HttpFox), а затем воспроизвести программно.
1. Набираем в браузере адрес http://bobrdobr.ru/
2. Вводим логин и пароль, смотрим сниффер. Видим главное:
- Отправлять POST запрос нужно на адрес http://bobrdobr.ru/login/
- POST данные выглядят следующим образом:
username=%ЛОГИН%&password=%ПАРОЛЬ%&remember_user=on&next=%2F
- При успешном входе сервис пересылает нас ч-з 302-редиррект на главную страницу.
3. Кликаем по ссылке «Добавить закладку», получаем диалог, в котором вводим все данные и жмем «Сохранить».

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


Ну наконец-то у кого-то руки дошли написать о курле (-:
Сам пользуюсь, а вот написать какой-то манул всё руки не доходят…
Огромное спасибо (-:
Классно! Мне понравилось… Жаль только, что я не программер, а то пытливый ум вместе с шаловливыми ручками меня бы далеко завели
У меня даже базового опыта работы с PHP нет
опа спасибо, очень интересный урок для меня как для начинающего, кстати а для чего вообще Curl предназначена?
Для работы с http, https, ftp, sftp протоколами, и помоему еще с менее распространенными работает. Я ее только для работы с http использую в основном.
Samborsky, то есть там все для этого необходимое? хотя не рассказывай, сам разберусь
Кстати, может кому-то надо, то у меня есть книжка по CURL, но на английском… литературы по курлу не то, что мало, её катастрофически мало…
none, о если не трудно
none, давай выкладывай.
p.s. следующий урок выложу посвященный простеньким примерам.
А не подскажешь как называется Http сниффер
HttpFox, это плагин для Firefox
Samborsky, полезный плагин не занл о нем, спасибо =)
[...] И еще сдесяток блоггеров (буду ставить ссылку на последнюю запись, фигли, трекбек еще никто не отменял): Маул, Саша, Пузат, Степан, Женя [...]
На хостинге дополнительные библиотеки CURL должны стоять?
Да, точней это не дополнительные библиотеки, php_curl – это один модуль.
Я думаю он на любом платном хостинге стоит по дефаулту, т.к. библиотека используется в любом более-менее серьезном скрипте.
Да вот на VDS не оказалось, спасибо щас буду ставить тогда
Ставь, тем более я сегодня после обеда выложу две вкуснейшие утилиты, без curl они не будут работать
спасибо большое
Евгений можно сказать спалил тему как авторизироваться на сайтах и делать там что угодно, теперь все начнут свои автопостеры клепать. Осталось спалить тему как капчи отсылать и получать разгаданные с помощью антикапчи (хотя и эта тема уже спалена, если поискать) и появится новый полностью автоматический сервис по автореги мыла, регистрации акков на соц закладках и постинг самих закладок. Интересно кто же первый сделает такой полностью автоматический сервис? BPoster? А может Вы Евгений? Хотя он будет немало времени забирать, т.к. придется мониторить изменения на закладках, бороться с антиботовыми скриптами и т.п.
Спасибо. Полезный код я как раз подобное на C++ собираюсь написать(тоже с CURL)
привет. вот у меня вопрос. как мне сохранить динамическую капчу? у нее вид ссылки
допустим _site.ru/captcha.jsp?key=21f3f2 и она при каждом обращении меняется.
paradox
Если один раз ее можно скачать, то ведь картинку можно сохранить локально? Так ведь?
А потом показывай сохраненный экземпляр где хочешь
А чем библиотека от фреймворка отличается?
И еще один вопрос: можно ли сделать этот скрипт без if?
Заранее спасибо!
Библиотекой называют какой-то функционал, который не позволяет программисту делать велосипеды.
Фреймворк – совокупность библиотек, или просто очень большая библиотека.
Это чисто мое понимание, возможно я не прав.
Ну то есть вместо громоздкого кода пишется пара строчек? Только библиотека узко специализирована, а фреймворк дает широкие возможности во всех областях.
А Curl скачаивает картинки, JS, CSS, счетчики и прочее? Или только html-код?
Только html и ничего более, это же не браузер.
Укажешь ссылку на картинку, скачает картинку
Здравствуйте. Не могли бы Вы мне подсказать одну вещь?
К curl’у в принципе не относится, но к бобру относится))
При регистрации в бобре спрашивают ввести капчу.. Вот как эту капчу возможно достать? То есть получить прямую ссылку, ведь там как я понял создаётся сессия.. Через httpfox понятно.. А так даже не знаю..
Если поможете – буду очень благодарен!
Спасибо.
Евгений, я немножко не понял после логина. Вернее с функцией preg_match, ведь она ищет этот тайный код на странице, в которой его нету, мы же должны переходить на new_bookmark.html и там уже его искать, разве не так?
Артем
Да, действительно, вы правильно подметили, для начала нужно перейте на страницу добавления закладки. Видимо автор оставил нам додумать и это хорошо.
Статья классная, вот пытаюсь написать подобное, только регилку, застрял на капче.
Теперь жду, может у вас статья про регу с капчёй здесь появится скоро
К сожалению, данный скрипт уже не работают. Видимо программисты усердно борятся со спаммерами.
Скрипт, отлично работает.. Нужно только лишь, изменить структуру 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, у меня один вопросик, если будет свободное время пожалуйста ответь..
Хост выдает следующую ошибку
Хостер сказал что они не поддерживают open_basedir, это не безопасно.. Как еще можно выполнить перенаправление по 302 коду?
Сдается мне, что там написано – CURLOPT_FOLLOWLOCATION не может быть активировано, если активен safe_mode или установлен open_basedir
Хотя… Может неправда? =)
ЗЫ: по идее, такое лечится с помощью
ini_set('safe_mode','off');
ini_set('open_basedir','');
Free0N, спасибо..попробую..
[...] написан на основе скриптов Spryt’a и Евгения Самборского, за что им [...]
А не поможите ли мне понять как запостить в свой блог курлом на blogs.mail.ru и на ya.ru??
Начнем с того что я не могу точно определить какие поля формы отправлять. Залогиниться то получилось.
Спасибо