cURL это PHP расширение библиотеки libcURL, инструмент при помощи которого Вы можете симулировать веб браузер. К примеру это может быть отправка формы для авторизации на сайте и получения результирующей страницы. В этой статье я собираюсь показать вам 10 невероятных вещей, которые Вы можете сделать с помощью PHP и CURL.
Обратите внимание, что некоторые из методов, показанные здесь, могут быть использованы для методов "черной" оптимизации а также для парсинга сайтов и кражи информации. Целью данной статьи является только ознакомление, пожалуйста, не используйте любой из фрагментов ниже в незаконных целях.
1 - Обновление своего фейсбук статуса
Хотите автоматически обновлять facebook статус, но не хотите заходить на facebook.com, вводить каждый раз логин и пароль, и, делать это со страниц своего сайта? Просто сохраните следующий код на вашем сервере, определить переменные, и вуаля!
<?PHP /******************************* * Facebook Status Updater * Christian Flickinger * http://nexdot.net/blog * April 20, 2007 *******************************/ $status = 'Новый статус' ; $first_name = 'YOUR_FIRST_NAME' ; $login_email = 'YOUR_LOGIN_EMAIL' ; $login_pass = 'YOUR_PASSWORD' ; $ch = curl_init(); curl_setopt( $ch , CURLOPT_URL, 'https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php' ); curl_setopt( $ch , CURLOPT_POSTFIELDS, 'email=' .urlencode( $login_email ). '&pass=' .urlencode( $login_pass ). '&login=Login' ); curl_setopt( $ch , CURLOPT_POST, 1); curl_setopt( $ch , CURLOPT_HEADER, 0); curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1); curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false); curl_setopt( $ch , CURLOPT_COOKIEJAR, "my_cookies.txt" ); curl_setopt( $ch , CURLOPT_COOKIEFILE, "my_cookies.txt" ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3" ); curl_exec( $ch ); curl_setopt( $ch , CURLOPT_POST, 0); curl_setopt( $ch , CURLOPT_URL, 'http://m.facebook.com/home.php' ); $page = curl_exec( $ch ); curl_setopt( $ch , CURLOPT_POST, 1); preg_match( '/name="post_form_id" value="(.*)" \/>' .ucfirst( $first_name ). '/' , $page , $form_id ); curl_setopt( $ch , CURLOPT_POSTFIELDS, 'post_form_id=' . $form_id [1]. '&status=' .urlencode( $status ). '&update=Update' ); curl_setopt( $ch , CURLOPT_URL, 'http://m.facebook.com/home.php' ); curl_exec( $ch ); ?> |
Дальше интереснее
2 - получить скорость загрузки веб-сервера
Вы когда-нибудь хотели узнать точную скорость загрузки своего веб-сервера (или любого другого) Если да, то Вам понравится этот код. Просто в $url задаем адресс какого-либо доступного интернет ресурса, фото, видео или даже pdf документа. А дальше получаем полную статистику по загрузке этого ресурса Вашим сервером.
<?php error_reporting (E_ALL | E_STRICT); // Initialize cURL with given url $url = 'http://download.bethere.co.uk/images/61859740_3c0c5dbc30_o.jpg' ; $ch = curl_init( $url ); curl_setopt( $ch , CURLOPT_HEADER, 0); curl_setopt( $ch , CURLOPT_USERAGENT, 'Sitepoint Examples (thread 581410; http://www.sitepoint.com/forums/showthread.php?t=581410)' ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 2); curl_setopt( $ch , CURLOPT_TIMEOUT, 60); set_time_limit(65); $execute = curl_exec( $ch ); $info = curl_getinfo( $ch ); // Time spent downloading, I think $time = $info [ 'total_time' ] - $info [ 'namelookup_time' ] - $info [ 'connect_time' ] - $info [ 'pretransfer_time' ] - $info [ 'starttransfer_time' ] - $info [ 'redirect_time' ]; // Echo friendly messages header( 'Content-Type: text/plain' ); printf( "Загружено %d байт за %0.4f секунды.\n" , $info [ 'size_download' ], $time ); printf( "Со скоростью %0.4f mbps\n" , $info [ 'size_download' ] * 8 / $time / 1024 / 1024); printf( "CURL сообщает скорость %0.4f mbps\n" , $info [ 'speed_download' ] * 8 / 1024 / 1024); echo "\n\ncurl_getinfo() said:\n" , str_repeat ( '-' , 31 + strlen ( $url )), "\n" ; foreach ( $info as $label => $value ) { printf( "%-30s %s\n" , $label , $value ); } ?> |
3 - Авторизация на Myspace с помощью Curl
<?php function login( $data , $useragent = 'Mozilla 4.01' , $proxy = false ) { $ch = curl_init(); $hash = crc32( $data [ 'email' ]. $data [ 'pass' ] ); $hash = sprintf( "%u" , $hash ); $randnum = $hash .rand( 0, 9999999 ); if ( $proxy ) curl_setopt( $ch , CURLOPT_PROXY, $proxy ); curl_setopt( $ch , CURLOPT_COOKIEJAR, '/tmp/cookiejar-' . $randnum ); curl_setopt( $ch , CURLOPT_COOKIEFILE, '/tmp/cookiejar-' . $randnum ); curl_setopt( $ch , CURLOPT_USERAGENT, $useragent ); curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1 ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch , CURLOPT_POST, 0); curl_setopt( $ch , CURLOPT_URL, 'http://www.myspace.com' ); $page = curl_exec( $ch ); preg_match( '/MyToken=(.+?)"/i' , $page , $token ); if ( $token [1] ) { curl_setopt( $ch , CURLOPT_URL, 'http://login.myspace.com/index.cfm?fuseaction=login.process&MyToken=' . $token [1] ); curl_setopt( $ch , CURLOPT_REFERER, 'http://www.myspace.com' ); curl_setopt( $ch , CURLOPT_HTTPHEADER, Array( 'Content-Type: application/x-www-form-urlencoded' ) ); curl_setopt( $ch , CURLOPT_POST, 1 ); $postfields = 'NextPage=&email=' .urlencode( $data [ 'mail' ] ). '&password=' .urlencode( $data [ 'pass' ] ). '&loginbutton.x=&loginbutton.y=' ; curl_setopt( $ch , CURLOPT_POSTFIELDS, $postfields ); $page = curl_exec( $ch ); if ( strpos ( $page , 'SignOut' ) !== false ) { return $randnum ; } else { preg_match( '/MyToken=(.+?)"/i' , $page , $token ); preg_match( '/replace\("([^\"]+)"/' , $page , $redirpage ); if ( $token [1] ) { curl_setopt( $ch , CURLOPT_POST, 0 ); curl_setopt( $ch , CURLOPT_URL, 'http://home.myspace.com/index.cfm?&fuseaction=user&Mytoken=' . $token [1] ); $page = curl_exec( $ch ); curl_close( $ch );; if ( strpos ( $page , 'SignOut' ) !== false ) { return $randnum ; } } elseif ( $redirpage [1] ) { curl_setopt( $ch , CURLOPT_REFERER, 'http://login.myspace.com/index.cfm?fuseaction=login.process&MyToken=' . $token [1] ); curl_setopt( $ch , CURLOPT_URL, $redirpage [1] ); curl_setopt( $ch , CURLOPT_POST, 0 ); $page = curl_exec( $ch ); curl_close( $ch ); if ( strpos ( $page , 'SignOut' ) !== false ) { return $randnum ; } } } } return false; } ?> |
4 - опубликовать пост на вашем блоге WordPress, используя Curl
Многим нравится WordPress, а что если публиковать одну и туже новость или пост сразу в нескольких своих wordPress блогах. В этой CMS есть такая функция.При этом Вам не потребуется входить в панель администрирования. Хотя, преред ее использованием необходимо активировать опцию XMLRPC размещения в вашем блоге WordPress. Если эта опция не активирована, код не сможет вставлять что-либо в базе данных WordPress. Другое дело, убедитесь, что XMLRPC функции включена на вашем файле php.ini.
function wpPostXMLRPC( $title , $body , $rpcurl , $username , $password , $category , $keywords = '' , $encoding = 'UTF-8' ) { $title = htmlentities( $title ,ENT_NOQUOTES, $encoding ); $keywords = htmlentities( $keywords ,ENT_NOQUOTES, $encoding ); $content = array ( 'title' => $title , 'description' => $body , 'mt_allow_comments' =>0, // 1 to allow comments 'mt_allow_pings' =>0, // 1 to allow trackbacks 'post_type' => 'post' , 'mt_keywords' => $keywords , 'categories' => array ( $category ) ); $params = array (0, $username , $password , $content ,true); $request = xmlrpc_encode_request( 'metaWeblog.newPost' , $params ); $ch = curl_init(); curl_setopt( $ch , CURLOPT_POSTFIELDS, $request ); curl_setopt( $ch , CURLOPT_URL, $rpcurl ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_TIMEOUT, 1); $results = curl_exec( $ch ); curl_close( $ch ); return $results ; ?> |
5 - Проверка существования ссылки на ресурс, а точнее ее валидность
Это может быть полезно, к примеру для проверки битых ссылок в комментариях на форуме.
<?php $ch = curl_init(); curl_setopt( $ch , CURLOPT_URL, "http://www.jellyandcustard.com/" ); curl_setopt( $ch , CURLOPT_HEADER, true); curl_setopt( $ch , CURLOPT_NOBODY, true); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true); $data = curl_exec( $ch ); curl_close( $ch ) echo $data ; ?> |
6 - Оставить комментарий на WordPress блоге
Спемеры именно так и спамят Ваш любимый бложик, просто нужно заполнить все поля в массиве $postfields. Данный код можно переделать и для других сайтов, к примеру форумов. И легко можно использовать для продвижения на форумах своего ресурса.
<?php $postfields = array (); $postfields [ "action" ] = "submit" ; $postfields [ "author" ] = "Spammer" ; $postfields [ "email" ] = "spammer@spam.com" ; $postfields [ "url" ] = "http://www.iamaspammer.com/" ; $postfields [ "comment" ] = "I am a stupid spammer." ; $postfields [ "comment_post_ID" ] = "123" ; $postfields [ "_wp_unfiltered_html_comment" ] = "0d870b294b" ; //Url of the form submission $url = "http://www.ablogthatdoesntexist.com/blog/suggerer_site.php?action=meta_pass&id_cat=0" ; $useragent = "Mozilla/5.0" ; $referer = $url ; //Initialize CURL session $ch = curl_init( $url ); //CURL options curl_setopt( $ch , CURLOPT_POST, 1); //We post $postfields data curl_setopt( $ch , CURLOPT_POSTFIELDS, $postfields ); //We define an useragent (Mozilla/5.0) curl_setopt( $ch , CURLOPT_USERAGENT, $useragent ); //We define a refferer ($url) curl_setopt( $ch , CURLOPT_REFERER, $referer ); //We get the result page in a string curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //We exits CURL $result = curl_exec( $ch ); curl_close( $ch ); //Finally, we display the result echo $result ; |
7- получить общее число подписчиков по вашему блогу из сервиса FeedBurner.
Если вы блоггер, вы, вероятно, используя популярный сервис FeedBurner, который с помощью иконки показывает сколько людей "съели" Ваш канал. Этот сервис показывает число в виде миниатюрной иконки, которая не всем нравится и вписывается не в любой дизайн. С помощью следующего кода можно получить число подписчиков и встроить его куда угодно, в собственный дизайн
//get cool feedburner count $whaturl = "https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=feedburner-id" ; //Initialize the Curl session $ch = curl_init(); //Set curl to return the data instead of printing it to the browser. curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //Set the URL curl_setopt( $ch , CURLOPT_URL, $whaturl ); //Execute the fetch $data = curl_exec( $ch ); //Close the connection curl_close( $ch ); $xml = new SimpleXMLElement( $data ); $fb = $xml ->feed->entry[ 'circulation' ]; //end get cool feedburner count |
8 - отправка POST запроса на сервер
function request( $url , $post = 0, $ref = '' ){ $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_REFERER, $ref ); 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 ; } request( 'http://xdan.ru' ,http_build_query( 'text' => 'Произвольный текст' ), 'http://google.ru' ); |
9 - получить содержимое веб-страницы в переменную PHP
Это пожалуй самое главное, что можно делать с Curl, и дает Вам бесконечные возможности. Именно с этого примера и стоит начать изучение построения сложных парсеров.
<?php $ch = curl_init(); curl_setopt( $ch , CURLOPT_URL, "example.com" ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); $output = curl_exec( $ch ); curl_close( $ch ); ?> |
10 - Пост в Twitter используя PHP и CURL
Twitter очень популярен, уже долгое время, и у Вас, вероятно, уже есть учетная запись. (может ни одна) Почему бы не твитить через php автоматически
<?php // Set username and password $username = 'username' ; $password = 'password' ; // The message you want to send $message = 'is twittering from php using curl' ; // The twitter API address $url = 'http://twitter.com/statuses/update.xml' ; // Alternative JSON version // $url = 'http://twitter.com/statuses/update.json'; // Set up and execute the curl process $curl_handle = curl_init(); curl_setopt( $curl_handle , CURLOPT_URL, "$url" ); curl_setopt( $curl_handle , CURLOPT_CONNECTTIMEOUT, 2); curl_setopt( $curl_handle , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $curl_handle , CURLOPT_POST, 1); curl_setopt( $curl_handle , CURLOPT_POSTFIELDS, "status=$message" ); curl_setopt( $curl_handle , CURLOPT_USERPWD, "$username:$password" ); $buffer = curl_exec( $curl_handle ); curl_close( $curl_handle ); // check for success or failure if ( empty ( $buffer )) { echo 'message' ; } else { echo 'success' ; } ?> |
Комментарии
$postfields["_wp_unfiltered_html_comment"] = "0d870b294b"; - откуда Вы возьмете это значение?
Где и как можно узнать цену
или купить? днепропетровская резка фанеры