воскресенье, 6 марта 2011 г.

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

Появилась у меня недавно задача: получить данные с внешнего сайта. Всю жизнь я обычно работал с сокетами, напрямую отсылал заголовки, получал ответы. Вроде бы было все понятно и просто (хотя честно признаюсь, давно, когда только начинал, сырые заголовки 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($curlCURLOPT_HTTPAUTHCURLAUTH_BASIC ) ;

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

curl_setopt($curlCURLOPT_USERPWD"username:password"); 

?>

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


<?php

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

curl_setopt($curlCURLOPT_POSTtrue);

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

curl_setopt($curlCURLOPT_POSTFIELDS'param1=value1&param2=value2&param3=value3'); 

?>

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

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

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


<?php

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

$ch curl_init();

curl_setopt($chCURLOPT_URL"http://www.example.com/");

curl_setopt($chCURLOPT_HEADER0);

curl_exec($ch);

$error curl_error($ch);

$errno curl_errno($ch);

curl_close($ch);

?>

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

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

среда, 29 декабря 2010 г.

Компилируем php файлы

Работая с python и читая документацию по pyinstaller на меня вдруг снизошло озарение: А почему я никогда не пробовал скомпилировать php скрипты? Это же чертовски интересно и, кроме того, возможно, облегчило бы первоначальное развертывание сайта на локальной машине (например для тестирования), да и кроме того почему бы небольшие приложения не написать на php, а потом скомпилировать и посмотреть что из этого получится?


читать полностью

суббота, 25 сентября 2010 г.

Разруливаем линки, создаем ЧПУ или RewriteRule+PHP в действии

На сегодняшний день поисковые системы с гораздо большим “удовольствие” индексируют сайты с ЧПУ (англ. Friendly URL), т.е. с челоекопонятными ссылками. Посмотрите на ссылку данной статьи http://phpbegun.ru/2010/09/25/rewriterule/. Вам сразу становится понятно, что статья написана 25.09.10 и рассказывает о RewriteRule. Удобно? Конечно.

Подробнее

понедельник, 30 августа 2010 г.

Автоматическая генерация preview или качественный ресайз картинок

Обработка изображений – то, с чем сталкивается рано или поздно любой web-разработчик. Неважно какая задача перед вами стоит: генерация preview картинок или captcha это все свзяано с работой с графикой. Вот тут-то и начинаются обычно сложности, т.к. стандартная библиотека GD весьма примитивна. Кроме того, она сильно портит изображение при его ресайзе. Поэтому, я хочу рассказать об основах работы с Image Magic, правда далеко не на всех хостингах вы сможете найти расширение Imagick php. Еще раз хочу оговориться, если у Вас обыкновенный хостинг-перепроверьте установлен ли Image Magic (это можно сделать с помощью phpinfo()), в ином случае у Вас просто ничего не будет работать.

четверг, 11 марта 2010 г.

Создание собственных функций в PHP

В прошлых статьях я рассказывал о стандартных функциях PHP, но ни разу не упомянул о том, что функции может создавать сам программист. Те, кто знаком с другими языками воспримут это как само собой разумеющееся, тем же, кто не был знаком до этого ни с одним языком программирования будет интересно прочесть данную статью.

читать полностью

пятница, 18 декабря 2009 г.

Ошибки в PHP. Вывод, перехват, скрытие.

Ошибки, могут быть как друзьями программиста так и его врагами. Как говорится у каждой стороны две медали.
 Насколько часто вы бьетесь над программой, восклицая про себя: «Чего же ей еще не хватает?!». Помню, когда я был новичком, в самом начале пути познания PHP, у меня это было довольно часто, пока я не научился читать и понимать ошибки. Не стоит воспринимать ошибку как препятствие. Это подсказка для вас. Описание проблемы. Намного легче заниматься отладкой когда, если что-то не работает, видишь ее перед глазами. Поэтому, во время отладки стоит их включать если они отключены. Включаются ошибки достаточно просто. Можно включать их как через .htaccess так и с помощью самого PHP кода. 

далее

понедельник, 7 декабря 2009 г.

Труд программистов или все в этой жизни дается нелегко.

Наверное, этот пост следовало написать с самого начала, но я, честно признаться, как-то не думал об этом. На мысль описания работы программистов меня натолкнули..вы не поверите, именно расплодившиеся в огромном количестве сайты SEO тематики. Слишком много людей сейчас хотят зарабатывать большие деньги легко, поэтому многие пытаются познать SEO, забывая что ничего в этом мире легко не дается и на 10-20 человек занимающихся раскруткой сайтов только 1 имеет действительно хорошие прибыли. Но, я сейчас не об этом. <--more-->
Бытует мнение, что программисты получают достойные деньги за свою работу, ведь кому как не им, работающим «мозгами» получать «бабки». Но это далеко не правда. Действительно хорошие деньги получают либо Team лидеры, которые являются Профессионалами. Именно так, с большой буквы. Либо же те, кто занимаются исключительно своим проектом и проект удачен. И тех и других не очень большое число. В большинстве своем деньги весьма средние, а труд…ну я сейчас опишу, а вы судите сами. Работать приходится не только по 8 часов на работе, но иногда и дома, часто до ночи. Так в общей сложности у компьютера я провожу порядка 12 часов в сутки, что отнюдь не положительно сказывается на здоровье. Кроме того, у каждого программиста, я думаю, бывают периоды «отупения», когда чего-то не хватает и мозги полностью отключаются к чертям собачьим. Работодателю же все равно что вас там тревожит, он ставит сроки и платит деньги и, не взирая на ваше состояние, вы должны сдать проект в срок. Бывало так, что чтобы успеть к срокам спал по 4 часа в сутки.. Можно так же рассказать и о недобросовестности заказчиков, если говорить о фрилансе, и о неудавшихся по причине, например непроработанности дизайна (не зависящей от вас), проектах.. о самодурстве заказчиков которые не прислушиваются к вашему мнению на выходе, получая фиг знает что, только потому что не захотели услышать вас. Нюансов куча…
Вы только не подумайте, что я жалуюсь на жизнь. Нет, я люблю свою работу, я могу сидеть ночами (до определенного предела разумеется), ибо мне это интересно, и это самое главное. Если вы считаете, что программирование принесет вам золотые горы и только поэтому осваиваете PHP-хочу вас огорчить это не так…да и нелюбимое занятие превратится в адскую муку, если заниматься им каждый день. Поэтому настоятельно рекомендую еще раз подумать, а надо ли оно вам…учиться программировать.