Говорят, что создание сайта - очень длительный и трудоемкий процесс. Мы скажем - НЕТ! Ведь с новыми технологиями, такими как HTML5, CSS3, PHP и MySql можно быстро и легко научиться создавать сайты любой сложности.
Два сумасшедших веб-мастера покажут где что лежит и как этим пользоваться.
Авторизация
Новый
Забыл
Пожалуйста, заполните поля выше. Это нужно сделать обязательно, иначе ничего не получится.
PHP Статейки /

Освоение cURL

  • Воскресенье, 24 апреля 2012, 23:51 |
  • Автор: fiamma |
  • Просмотров: 5228 |
  • Комментарии: 1 |
  • В закладки:
Освоение cURLCURL - это инструмент для передачи файлов и данных с помощью URL синтаксиса, поддерживающий большой кол-во протоколов, таких как: HTTP, FTP, Telnet и многих других.

Изначально, CURL был разработан в виде командной строки, но к счастью для нас, CURL библиотека входит в базовый набор библиотек PHP. В данной статье мы рассмотрим некоторые из базовых функций CURL и то, как применить данную библиотеку в самопальных проектах.

Почему CURL?

На самом деле в PHP существует огромная масса функций, позволяющих спарсить страницу. Много раз, в основном из-за своей безграничной ленивости, я использовал простые функции вместо cURL.
$content = file_get_contents("http://www.takein.ru");

// или

$lines = file("http://www.takein.ru");

// или

readfile("http://www.takein.ru");
Однако гибкость данных функций оставляет желать лучшего. Кроме того, есть определенные задачи, такие как работа с cookies, авторизация, загрузка файлов, которые нельзя решить без использования CURL.

Часть 1. Базовая структура

Прежде чем мы перейдем к более сложным примерам, давайте рассмотрим структуру CURL запросов в PHP. Существует четыре основных этапа:
  1. Инициализация
  2. Задание параметров
  3. Выполнение и возврат результата
  4. Выгрузка
// 1. Инициализация
$ch = curl_init();

// 2. Задание параметров
curl_setopt($ch, CURLOPT_URL, "http://www.takein.ru");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. Выполнение и возврат результата
$output = curl_exec($ch);

// 4. Очистка
curl_close($ch);

Часть 2. Проверка на наличие ошибок

По желанию, вы так же можете добавить проверку ошибок:
// ...

$output = curl_exec($ch);

if ($output === FALSE) {

    echo "cURL Error: " . curl_error($ch);

}

// ...
Обратите внимание на то, что мы должны использовать оператор "===" а не "==".

Часть 3. Получение информации

После того, как CURL выполнил свою задачу, необходимо получить результат.
// ...

curl_exec($ch);

$info = curl_getinfo($ch);

echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];

// ...
Он возвращает массив содержащий такие значения:
"URL"
"Content_type"
"Http_code"
"Header_size"
"Request_size"
"FILETIME"
"Ssl_verify_result"
"Redirect_count"
"Total_time"
"Namelookup_time"
"Connect_time"
"Pretransfer_time"
"Size_upload"
"Size_download"
"Speed_download"
"Speed_upload"
"Download_content_length"
"Upload_content_length"
"Starttransfer_time"
"Redirect_time"

Часть 4. Определение перенаправления браузера

В этом примере мы напишем скрипт, который сможет отследить тип переправление: перенаправление на мобильную версию сайта, на версию сайта другого региона и т.п.
// Проверка URL
$urls = array(
    "http://www.cnn.com",
    "http://www.mozilla.com",
    "http://www.facebook.com"
);
// Тест браузеров
$browsers = array(

    "standard" => array (
        "user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",
        "language" => "en-us,en;q=0.5"
        ),

    "iphone" => array (
        "user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3",
        "language" => "en"
        ),

    "french" => array (
        "user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
        "language" => "fr,fr-FR;q=0.5"
        )

);

foreach ($urls as $url) {

    echo "URL: $url\n";

    foreach ($browsers as $test_name => $browser) {

        $ch = curl_init();

        // Отправка URL
        curl_setopt($ch, CURLOPT_URL, $url);

        // Отправка заголовков браузера
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                "User-Agent: {$browser['user_agent']}",
                "Accept-Language: {$browser['language']}"
            ));

        // сразу не отображает инфу
        curl_setopt($ch, CURLOPT_NOBODY, 1);

        // Необходимы заголовки возвращаются
        curl_setopt($ch, CURLOPT_HEADER, 1);

        // Возврат общего результат
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $output = curl_exec($ch);

        curl_close($ch);

        // Что за заголовки вернулись?
        if (preg_match("!Location: (.*)!", $output, $matches)) {

            echo "$test_name: redirects to $matches[1]\n";

        } else {

            echo "$test_name: no redirection\n";

        }

    }
    echo "\n\n";
}
Изначально, мы задаем список URL-ов для проверки и настройки браузера для проверки каждого из этих URL-ов и настроили CURL так, чтобы он возвращал HTTP заголовки.

Если вы запустите скрипт, то браузер выдаст:
Освоение cURL

Часть 5. Отправка URL

С помощью GET запроса данные могут быть переданы используя строку запроса. Например при поиске в гугле, сам поисковой запрос находится в адресной строке браузера.
http://www.google.com/search?q=nettuts

Вам не нужен CURL для имитации этого сценария. Вы можете быть достаточно ленивым и для получения результата воспользоваться file_get_contents ().

Но некоторые HTML формы используют POST передачу запросов. Когда эти формы выводятся браузером, данные передают в теле запроса, а не через адресную строку.

Мы можем написать скрипт для имитации такого URL запроса. Сначала давайте создадим простой скрипт для приема и отображения POST данных. Давайте назовем его post_output.php:
print_r($_POST);  

Далее мы создадим скрипт для выполнения запроса CURL:
$url = "http://localhost/post_output.php";

$post_data = array (
    "foo" => "bar",
    "query" => "Nettuts",
    "action" => "Submit"
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Делаем POST запрос
curl_setopt($ch, CURLOPT_POST, 1);
// добавляем переменные к запросу
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

Когда вы запустите этот сценарий, вы должны получить примерно такой результат:
Освоение cURL


Часть 6. Загрузка файлов

подключение по локальной сети
Скрипт загрузки файлов очень похож на наш предыдущий пример, т.к. передача файлов идет через POST-запросы.
Сначала давайте создадим файл для получения запроса и назовем его upload_output.php
print_r($_FILES);
А вот сценарий загрузки файлов:
$url = "http://localhost/upload_output.php";

$post_data = array (
    "foo" => "bar",
    // file to be uploaded
    "upload" => "@C:/wamp/www/test.zip"
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;
Если вы хотите загрузить файл, все, что вам нужно - это указать путь к файлу и поставить символ @ перед ним. Теперь, когда вы запустите этот сценарий, браузер отобразит сл. строки:
Освоение cURL

На данные момент это все. А если вам всетаки не хватило информации, советую прочесть Создание капчи на PHP

Чтобы проветривать комнату, не открывая окон, а также избежать образования конденсата, закажите монтаж клапана аэрэко.
  • Пишет: Brittany (Гости) |
  • Сообщений: 0 |
  • 5 декабря, 05:12
  • #1
The answer of an exrept. Good to hear from you.
Добавить комментарий