QRL (Quick URL) class
Небольшая презентация моего класса для работы с HTTP.
require_once("inc/qrl.php");
$req = new qrl;
print $req->submit_request("http://www.google.com/") or exit("Ошибка");
Более сложный пример:
require_once("inc/qrl.php");
$req = new qrl;
$req->error_reporting = 1;
/* класс позволяет определить, если случилась ошибка Вы всегда можете
проверить $req->last_error и $req->last_errno (текст и код ошибки).
$req->error_reporting определяет выводить ли сообщение об ошибке
Также можно настроить вывод только error/warning/notice-типов ошибок,
показывать статус-сообщения (напр. редиректы).
*/
$req->clear_log_dir();
/* по умолчению, если существует директория inc/logs/,
то все запросы записывются в файлы вида 2007-06-15_19-17-18.htm
qrl::clear_log_dir() очищает эту папку
*/
$req->use_curl = QRL_AUTO;
/* класс поддерживает сокеты и curl. Т.к. сокеты более распостранены,
но обычно нет поддержки ssl-сокетов, то по умолчанию (QRL_AUTO) -
для http используются сокеты, для https - cURL
*/
// необязательно (см. умолчания в классе), но можно также настроить:
$req->proxy = "123.45.67.233:8080"; // прокси в формате адрес:порт
$req->connect_timeout = 30; // таймаут соединения
$req->timeout = 3*60; // макс. время получения данных
$req->only_header = false; // получить только хидер (приём останавливается)
$req->max_redirs = 5; // макс. число автоматич. редиректов (0-откл.)
$req->accept = "image/gif, image/jpeg, */*"; // хидер Accept
$req->accept_language = "en"; // хидер Accept_language и User_agent
$req->user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$req->log_dir = "inc/logs"; // директория для логгинга запросов
$req->logging = 1; // логгинг, 1 (QRL_YES) - создать, если не существует
// А теперь делаем POST-запрос на http://www.host.com/page.php?p=1:
$req->referer = "http://www.host.com/";
$req->submit_request("http://www.host.com/page.php?p=1", "id=123&on=333");
if ($req->last_errno) exit("Ошибка при запросе.");
echo $req->p_content; // выводим контент полученной странички
// также можно посмотреть хидер, статус код, статус сообщение
ПРОДОЛЖЕНИЕ СЛЕДУЕТ
(задавайте вопросы, спрашивайте что показать)
Класс распостраняется только с моими разработками. Стоимость проектов от $50.

августа 21, 2007 в 17:32
Ну вроде все понятно
сентября 10, 2007 в 18:42
это типа для тех, у кого CURL не работает ?
сентября 14, 2007 в 01:05
Сначала я оформлял всё как функции с передачей аргументов по ссылке.
Была функция для парсинга и исправления url (как parse_url),
функция парсинга html-тэгов (разбора по аттрибут=>значение),
функция для отправки запроса (с поддержкой cookie, referer).
Для каких-то клиентов я делел всё на сокетах, кому-то нужна была поддержка https (а сокеты с поддержкой ssl встречаются реже, чем поддержка cURL). При этом код с cURL-ом ненамного отличался по размеру от кода для сокетов.
Потом я пришёл к тому, что лучше всё это объеденить в один класс. Так появился qrl. По умолчанию для http он использует сокеты, для https - cURL.
Позже я добавил метод для сабмита форм по её имени с подстановкой соотв. полей. Создал доп. класс для управлением ошибками (class qrl extends err_class {).
Подобные классы уже есть, напр. Snoopy, но я категорически не приемлю чужих разработок.
Далее я создал класс для многопоточной отправки запросов с помощью неблокирующих сокетов. Этот класс использует объекты класса qrl для каждого запроса. В PHP5 есть curl_multi, но у него один недостаток - нельзя добавить новый поток пока не отработали все предыдущие.
В итоге получился очень удобный инструмент для работы с HTTP. По крайней мере для меня.