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&amp;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';
}
?>

 

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

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

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

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

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


Комментарии   

DimaX
+1 # DimaX 16.06.2013 15:11
Такой постинг в твиттер (скрипт #10) уже давным-давно не работает.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
DexizeR
+1 # DexizeR 17.06.2013 22:56
фидбурнер более не отдает цифру по числу подписчиков = обломись
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leroy
-1 # Leroy 17.06.2013 23:30
это перевод. просто демонстрация того как работать с curl
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Otrava
0 # Otrava 05.10.2013 23:54
Есть приватное решение прочитать цифру подписчиков FeedBurner и вставить ее динамически в любое место сайта в любом виде. Также есть удобный плагин под WordPress. Примеры тут: seo-doorways.ru (виджет справа и в сайдбаре). Продам за символические 5 вмз. Стучим в аську 3355два974три
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
romankk
0 # romankk 06.11.2013 22:50
пример 9 - "получить содержимое веб-страницы в переменную PHP"


ch = curl_init(); // скорее переменная обозначается как $ch (пропущен знак амперсанда)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
chick1
0 # chick1 09.01.2017 12:25
А можно вопрос по поводу п.6?
$postfields["_wp_unfiltered_html_comment"] = "0d870b294b"; - откуда Вы возьмете это значение?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Clara
0 # Clara 18.12.2019 21:14
And that lasst item is essential, because regardless of how good an event is, nothing makes
a celebration great much like the perfect, personal party decorations you choose.
From Barmans online, you will possess thhe full
bar and catering materials covered-along together with your home bar and even your
outdoor dining set up. In this Shahrukh Khan has
played role jujst as the one played in Super Hero.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
cat hat
0 # cat hat 31.12.2019 23:35
Excellent read, I just passed this onto a colleague who was
doing some research on that. And he just bought me lunch because I found it
for him smile Thus let me rephrase that: Thanks for lunch!


Look into my web page - cat hat
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
cat hat
0 # cat hat 01.01.2020 00:06
I know this web site presents quality depending posts and extra material, is there
any other web page which offers these kinds of things in quality?


Here is my blog ... cat hat
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Keto Pure Trim
0 # Keto Pure Trim 03.01.2020 17:04
I've been exploring for a little for any high-quality
articles or blog posts on this kind of space . Exploring in Yahoo I
at last stumbled upon this web site. Studying this information So i am glad to convey that I've a very
good uncanny feeling I found out exactly what I needed.
I such a lot for sure will make sure to don't put out of your mind
this website and give it a glance regularly.

Also visit my blog post Keto Pure Trim
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Keto Genesys Blend
0 # Keto Genesys Blend 03.01.2020 19:02
Wow, awesome blog layout! How long have you been blogging for?
you make blogging look easy. The overall look of your website is magnificent, let alone the content!



Also visit my blog - Keto Genesys Blend
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
blogspot
0 # blogspot 12.01.2020 11:47
I am usually looking for new info upon this kind of important subject, and am especially happy the
moment I locate sites that are well-written and well-researched.
Thank you for offering this kind of exceptional info, and I look ahead to
reading more from the weblog in the long term future.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
918kiss logo
0 # 918kiss logo 16.01.2020 07:48
Hello tto all, for the reason that I am in fzct eager of
reading this webpage's post to be upddated regularly. It consists of nice information.

Here is my web blog: 918kiss logo
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
918kiss game hacker
0 # 918kiss game hacker 17.01.2020 04:40
Hi, Neat post. There's an issue with your wbsite in web explorer, ould check this?
IE still is thee marketplace leader and a large part of folks will pass over your wonderful writing due to this problem.


Alsoo vjsit my webpage: 918kiss game hacker
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Lawrence
0 # Lawrence 17.01.2020 09:50
This piece of writing is truly a good one it assists neww net
people, who are wishing for blogging.

Stop by my web blog :: scr888 video (Lawrence)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Velva
0 # Velva 21.01.2020 23:57
whoah this blog is fantastic i like reading your articles.
Keep up the good work! You know, lots of individuals are looking around for this information, you could help them greatly.


Here is my blog post ... Juul Jucce Box ()
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
toto 4d picture
0 # toto 4d picture 22.01.2020 23:01
After checking out a number of the blog posts on your blog, I seriously appreciate your technique of writing a blog.
I bookmarked it to my bookmark website list and will be checking back in the near future.
Please check out my web site as well and tell me how you feel.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Silent Snore Reviews
0 # Silent Snore Reviews 23.01.2020 18:22
I'm really impressed with your writing skills and also with the
layout on your weblog. Is this a paid theme or did
you customize it yourself? Either way keep up the nice quality
writing, it's rare to see a nice blog like this one nowadays.



Also visit my site: Silent Snore Reviews
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
KorePulse Review
0 # KorePulse Review 24.01.2020 00:54
Attractive part of content. I simply stumbled upon your weblog and in accession capital to assert that I acquire in fact enjoyed account your blog posts.
Any way I'll be subscribing on your feeds or even I success you get entry to persistently fast.


My blog post - KorePulse
Review
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору