Бібліотека Php Curl

Php початківцям

Ініціалізація сеансу CURL та завантаження web-сторінки

Що нам це дає, а те, що сторінку інтернету завантажили функціями Curl, а потім віддали її браузеру і сервер отримав про нас тільки ту інформацію, яку ми самі захотіли віддати. У скрипті, що наведений, ми нічого не передали на сервер. Плюс тепер сокетне з'єднання нам не потрібне.

Що потрібно для того, щоб це працювало

Запустіть такий скрипт і подивіться чи є підтримка Curl, це буде видно в модулях, що підключаються. Якщо немає підтримки Curl, подивіться рядок з php.ini

Для php4 замініть її на

ви бачите, що ми тут прописали повний шлях до папки" ext "- вона може бути папка з модулями

якщо папка з додатковими модулями називаєтьсяextensionsабо іншу назву, наприкладext, тобто назва папки.

Знайдіть папкуextensions, вона має лежати з основним файломphp.exe. У цій папці повинен лежати модуль Curl -php_curl.dll, крім цього у папці з модулями для Win32 - це папка, де лежать основні файли з розширенням.dll(наприклад, win/sistem /drivers/ або windows/sistem32/ або ін.) повинні бути два додаткові файлиlibeay32.dllіssleay32.dll. Якщо їх там немає, то самостійно запишіть їх туди з папкиdlls, яка знаходиться поруч із папкоюextensions.

Заберіть " ; " з рядка в php.ini

Подивіться, чи підтримка Curl. Якщо ні, спробуємо підключити модуль динамічно. Тут є архів модулів php_curl.dll для Windows (412 Kb). Просто скачайте його та спробуйте встановити.

Сформуємо запит до сервера, тобто те, що хочемо йому показати про нас. Надалі передамо йому саме це і він думатиме про нас так, як мипропишемо. Тобто формуємоheaderзапит.

Якщо не прибрати xml розширення, то наш броузер виводитиме текст у xml форматі, що нам не потрібно, адже сторінки ми завантажуватимемо не броузером, а програма розуміє xml просто як текст, що для нас погано. Якщо ми залишили тількиAccept: text/html;то сервер намагатиметься віддати нам сторінку в html форматі. Те саме заAccept_encoding: identityякщо рядок такий, то сервер намагатиметься віддати нам стислий у gzip форматі документ. Не секрет, що сторінки в такому форматі броузер сам розпаковує та показує нам. Це зроблено на багатьох серверах для прискорення роботи Інтернету. Але, оскільки ми завантажуватимемо сторінки не броузером, то нам ніяк не можна отримувати їх у стислому вигляді. Тож запит сформований, що далі?

$val ue) <if(is_array( $val ue )) $vars .= data_encode ( $val ue , $key prefix . $key . $key postfix .urlencode("["),urlencode("]"));else$vars .= $key prefix . $key . $key postfix . "=" .urlencode($ val ue). "&" ; > return $vars; >

// функція розділення URL function _parse_url ($ path) <preg_match("

", $path , $arr );if( $arr [ 0 ] =='') < returnarray('path' => $path ) ; > returnarray('scheme' => $arr [ 1 ] , 'host' => $arr [ 2 ] , 'path' => $arr [ 3 ] , 'query' => 3>$host = $arr [ 'host' ] ;if(!empty( $arr [ 'path' ] )) $page = $arr [ 'path '];if(!empty($arr['query'])) $query = $arr['query']; (!empty( $query )) <.='?'. $query ; >якщо(порожній( $сторінка )) < $сторінка ='/'; > $fp =@fsockopen($host, 80, & $errno, & $errstr, 30);якщо(! $fp ) < return@implode('',@file( $path )); > $request = "GET $page HTTP/1.0\r\n"; $request .= "Хост: $host \r\n"; $request .= "Прийняти: text/html, application/xml;q=0.9, */ *;q=0.1\r\n"; $request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n"; $request .= "Accept-Encoding: deflate, gzip, identity, *;q=0\r\n"; $request .= "Accept-Language: ru\r\n"; $request .= "З'єднання: закрити\r\n"; $request .= "Keep-Alive: 300\r\n"; $request .= "Закінчується: четвер, 1 січня 1970 р. 00:00:01 GMT\r\n"; $request .= "Cache-Control: no-store, no-cache, must-revalidate\r\n"; $request .= "Pragma: немає кешу\r\n"; $request .= "Cookie: дохід=1\r\n"; $request .= "Реферер: http:// $host /\r\n"; $request .= "Агент користувача: Mozilla/5.0 (сумісний; MSIE 6.0; Windows 98)\r\n"; $request .= "\r\n";@fwrite($fp, $request); $fest = $out = '';while( $line =@fgets( $fp , 1024)) <if(preg_match("

$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7" ; $header [ ] = "Прийняти: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ; $header [] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"; $header [ ] = "Прийняти_кодування: ідентичність"; $header [ ] = "Accept_language: en-us,en;q=0.5"; $header [ ] = "Підключення: закрити"; $header [ ] = "Cache-Control: без збереження, без кешу, обов'язкова повторна перевірка"; $header [ ] = "Keep_alive: 300"; $header [ ] = "Закінчується: четвер, 1 січня 1970 р. 00:00:01 GMT";

// функція виведення сторінки function CurlPage($ path) < // $path - сторінка, яку дивимосяglobal$agent , $header , $referer , $arr _cookie , $cookie_file ;

// Викликаємо сеанс Curl $ ch =Curl_init($ path); // CURL повертатиме результат, а не виводити його до друку@curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 ); // виводимо докладні повідомлення про всі дії@curl_setopt($ ch, CURLOPT_VERBOSE, 1); // зчитуємо сторінку з хедером від сервера@curl_setopt($ ch, CURLOPT_HEADER, 1); // відправимо серверу user_agent сформований нами самими@curl_setopt($ch, CURLOPT_USERAGENT, $agent); // оправляємо $referer, що прийшли з першої сторінки сайту@curl_setopt($ch, CURLOPT_REFERER, $referer); // оправляємо на сервер хедер, який ми самі сформували@curl_setopt( $ch , CURLOPT_HTTPHEADER , $header ); // при отриманні HTTP заголовка "Location: " // відбуватиметься перенаправлення@curl_setopt( $ch , CURLOPT_FOLLOWLOCATION , 1 ); // заборонити перевірку сертифіката віддаленого сервера@curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0 ); // не перевірятимемо існування імені@curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, 0 ); // якщо є масив з cookie, то відправимо серверу, ці cookieif(@is_array( $arr _cookie )) <while(list( $key , $val ) =@each( $arr _cookie )) < $COKKIES .=trim( $val [ 0 ] )."=".trim($ val [1])."; "; >@curl_setopt( $ch , CURLOPT_COOKIE , $COKKIES ." expires=Mon, 14-Apr-08 10:34:13 GMT" ); > // якщо з сервера надійшло cookie, то запишемо його у файл $cookie_file@curl_setopt( $ch , CURLOPT_COOKIEJAR , $cookie_file);@curl_setopt($ ch, CURLOPT_COOKIEFILE, $cookie_file); // якщо ми надіслали дані з форми, яка стоїть // на сторінці $path , додаємо метод $_POSTif(isset( $_POST ) ) <if( $_SERVER [ "REQUEST_METHOD" ] =="POST") <@curl_setopt($ ch, CURLOPT_POST, 1);@curl_setopt( $ch , CURLOPT_POSTFIELDS ,substr( data_encode ( $_POST ), 0 , - 1 ) ); > > // отримуємо сторінку $path з хедером $tmp =@curl_exec($ch); // закриваємо сеанс Curlcurl_close($ ch);

// якщо Curl нічого не вивів пробуємо це зробити output_r(); // Ця функція описана тут, вона використовує сокет.if($tmp =='') < $ tmp = output_r ($ path); > return ''. $tmp; >

// сторінку, яку завантажуємо http://f9r.ru/php_curl.html $path = 'http://f9r.ru/php_curl.html';printCurlPage ($ path); ?>