(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

CURL или учимся работать с удаленными хостами

Источник: phpbegun

Появилась у меня недавно задача: получить данные с внешнего сайта. Всю жизнь я обычно работал с сокетами, напрямую отсылал заголовки, получал ответы. Вроде бы было все понятно и просто (хотя честно признаюсь, давно, когда только начинал, сырые заголовки web мне казались страшнее ядерной зимы). Но скучно. Главный враг и одновременно друг программиста именно скука…ну и еще лень. Скука ведет к тому, что ты начинаешь создавать что-то новое, придумываешь новые концепции…иногда конечно изобретаешь велосипед (ну куда ж без этого), но чаще пишешь стройную и логичную систему, поэтому я говорю что скука это лучший союзник, но это и враг ибо на изучение, продумывание, написание чего-то нового уходит гораздо больше времени, чем на реализацию более кривых, но рабочих решений.

Но я отвлекся..так вот решил я почитать доки по curl (на сервере часто юзал эту либу, а вот в php не приходилось), дабы реализовать работу со страничкой чужого сайта на основе этой замечательной библиотеки.

Итак, для начала нам нужно продумать алгоритм действий. Он достаточно просто.
Инициируем соединение, после чего посылаем все требуемые параметры (например параметры POST, информацию о себе, браузер и т.д) на удаленный хост, получаем ответ и делаем с ним то что нам требуется. На первый взгляд просто не так ли?
Но, как говорится, вся соль в деталях. Приведу пример.


<?php

//Инициируем соединение с сайтом www.example.com

$c  = curl_init('www.example.com');

//Если есть переадресации автоматически нас автоматически перенесет

curl_setopt($c,CURLOPT_FOLLOWLOCATION,true);

/*Полученные данные будут возвращены не напрямую в браузер

как было бы без этого параметра, а в переменную */

curl_setopt($c,CURLOPT_RETURNTRANSFER,true);

//Юзер-агент

curl_setopt($c,CURLOPT_USERAGENT,'Паучок');

//Максимальное время попытки соединения с удаленным хостом

curl_setopt($c,CURLOPT_TIMEOUT,30);

//Собственно выполняем соединение

$data=curl_exec($c);

//Закрываем соединение.

curl_close($c);

?>

Я наделюсь что в этом отрывке кода с комментариями вам все понятно. Это самый простейший вариант.

Может случиться так что Вам потребуется осуществлять забор данных с сайта, защищенного http авторизацией. В этом случае до  curl_exec  вам следует установить еще два параметра:


<?php

//Тип авторизации basic

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;

//Имя пользователя и пароль

curl_setopt($curl, CURLOPT_USERPWD, "username:password"); 

?>

Так же часто требуется не просто слать пустой запрос, но и посылать post или get параметры. Для этого, надо указать так же дополнительные опции:


<?php

//Указываем что запрос идет через метод пост

curl_setopt($curl, CURLOPT_POST, true);

//Отправляем параметры пост

curl_setopt($curl, CURLOPT_POSTFIELDS, 'param1=value1¶m2=value2¶m3=value3'); 

?>

Теперь, я думаю, вы ощущаете насколько удобна данная библиотека. И это при том? что я описал лишь малую толику возможных параметров, на самом же деле их гораздо больше. Например, можно использовать proxy или работать с фтп Более подробно вы можете прочесть в мануале по функции curl_setopt или в документации на офф сайте php.

Зачастую список параметров гораздо удобнее передавать массивом, для этого сушествует curl_setopt_array  Ключами в данном случае должны быть имена параметров, а значения-те значения, которые вы считаете нужным присвоить данным параметрам.

Если соединение не проходит обычно требуется разобраться в чем дело. Поэтому после отправки запроса стоит использовать функции  curl_error  и  curl_errno


<?php

// инициализация сеанса

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);

$error = curl_error($ch);

$errno = curl_errno($ch);

curl_close($ch);

?>

Теперь если возникнет ошибка вы сразу сможете просмотреть ее код и текст.

Пожалуй все на сегодня. Надеюсь что Вам стали понятны основы работы с curl… а дальше, все в ваших руках. Удачи в изучении PHP:)



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 12.07.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Dr.Web Security Space, продление лицензии на 1 год, 1 ПК
Microsoft Windows Professional 10, Электронный ключ
SmartBear Collaborator - Concurrent User License (Includes 1 Year Maintenance)
TeeBI for RAD Studio Suite with source code single license
КОМПАС-3D v17 Home
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
СУБД Oracle "с нуля"
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Новые материалы
Один день системного администратора
Delphi - проблемы и решения
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100