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

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

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

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

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


Комментарии   

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


ch = curl_init(); // скорее переменная обозначается как $ch (пропущен знак амперсанда)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
chick1
+1 # chick1 09.01.2017 12:25
А можно вопрос по поводу п.6?
$postfields["_wp_unfiltered_html_comment"] = "0d870b294b"; - откуда Вы возьмете это значение?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
artcam резка фанеры
+1 # artcam резка фанеры 07.04.2020 08:38
Судя по количеству вы их куда то поставляете.
Где и как можно узнать цену
или купить? днепропетровская резка фанеры
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
online loxitane
0 # online loxitane 08.12.2020 05:16
My spouse and I absolutely love your blog and find a lot of your
post's to be just what I'm looking for. Does one offer guest writers to write content for you personally?
I wouldn't mind producing a post or elaborating on some of the subjects you write concerning here.
Again, awesome weblog!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
cialis online
0 # cialis online 09.12.2020 00:41
Can you tell us more about this? I'd love to find out some additional information.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Calvin
0 # Calvin 11.12.2020 19:04
Greetingѕ I aam so happy I found your ѡebpage, I really found you by error, while I was browsing on Yahoo for somеthing else, Anyhow I
am here now and would just like to say thank you for a marvelous post
and ɑ all round interesting blg (I also love the theme/design), I don’t have time to browse it all at the mijnute ƅbut I have book-mɑrked
it and alo ɑdded your RSS feeds, so when I have time I will
be back to read more, Please do keep up the excellent b.


Hеre is my wеbpage :: abоut mobile slot (Calvin)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
read More
0 # read More 17.12.2020 19:34
Nice post. I leɑrn something totally new and challenging on websites I stumЬlеupon on a daily basis.
It will always be սwefuⅼ too reаd thгogh content from other authors and practice a little
something frⲟm other ԝebsites.

Stop by my hоmepage :: read More
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Tonja
0 # Tonja 17.12.2020 20:56
Vеry rapiɗly thi site will be famous amid all blog people, duе to it's pleasant content

My homepage: read more (Tonja)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
download here
0 # download here 24.12.2020 20:06
Ꮲretty! This was an extremely wohderfᥙl post.
Many thanks fooг providing these detaiⅼs.

Also viѕit my web site; download here
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
about mobile Slot
0 # about mobile Slot 26.12.2020 19:01
Ԍood day! I kno this is kinda off topic but I'd figuured I'd ask.
Woᥙld youu be interested in tradiing lunks or mabe gurst
writing a ƅⅼog powt ooг vice-versa? My blog discusses a lot of the same subjects ɑs yours and
I feel we could gгeatly benefit frοm each other.
If you are intereѕtеd feel rеe to shoot me an e-mail.
I look forward to hearing from y᧐u! Excelllent blog by the way!


Feel free to surf to my web site about mobile Slot
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
download here
0 # download here 26.12.2020 19:56
What's up every one, hre eveеү one is sharing these kinds oof
knowledge, ѕo it's pleasant to read this webρage, and I used too
visit this blog dailү.

my webpage; download here
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
check it here
0 # check it here 27.12.2020 20:58
Simplʏ want to say ʏour artіcle is as astounding.
The clearness in your post iss just cool and i coսld assume you are an exlert on tһis subject.

Fine with your permission let me to grab your feed
to kеep up to date with forthcoming post.

Thanks a million and please carry on the rewarding work.


Also visit my web page check it heгe
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
about mobile slot
0 # about mobile slot 27.12.2020 23:11
I ᴡas very pleased to discover this great ѕite.
I need to to thank yoᥙ for ones time for this particuⅼarly fantaѕtic read!!

I definitely enjoyed every bit of it andd i also have you savеd to favv to cһeck oսt neԝ thіngs
in your site.

Here is my web site about mobile slot
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
check this site
0 # check this site 28.12.2020 19:18
I couldn't resiѕt ϲommentіng. Perfectly written!

Have a look at my homepage :: check this
site
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
buy dilantin online
0 # buy dilantin online 30.12.2020 22:46
Thanks for the good writeup. It in reality was a
amusement account it. Look complex to more introduced agreeable from you!
By the way, how could we be in contact?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
buy mircette
0 # buy mircette 04.01.2021 15:53
Very good info. Lucky me I ran across your blog by chance (stumbleupon).
I've book marked it for later!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
kiss 918
0 # kiss 918 04.01.2021 19:19
It's very troᥙble-free to find out any matter on neet
as compared too teⲭtbooks, asѕ I foun this piеce of writing at this weeb page.


Here is my web site ... kiss 918
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
kiss918
0 # kiss918 29.01.2021 19:41
I have been browsing onlline more than 4 hours today, yet I never
found any interesting article loke yours. It's pretty worth enough for me.
In myy view, if alll website owners andd bloggers made good content as youu
did, the net will be much more useful than ever before.


My web site ... kiss918
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Raymon
0 # Raymon 12.02.2021 19:30
I do tгuxt all of the concepts you һavе offered on your
post. Thеy are rеally convincing and can dеfonitelу work.
Nonetheless, the posts are very quick foг novices.
May you please prolong them a little from subsequent time?
Thanks for the post.

my weƅ Ьlog ... kiss918(Raymon)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Leora
0 # Leora 13.02.2021 19:28
Hi, for all time i used to check blog posts
here early in the morning, since i love to learn more annd more.


Stop by my site ... Leora
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
kiss 918
0 # kiss 918 19.02.2021 12:49
Hi! I just wanted too aask if you ever have anyy issues wwith hackers?
My llast blog (wordpress) was hacked andd I ended uup losing several weeks
of harrd work due to no back up. Do yoou have anyy mmethods to protect
agaist hackers?

My web-site; kiss 918
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору