Класс для работы с сокетами
Суббота, 21. Март 2009
Раздел: PHP, автор: dx
PHP-класс, позволяющий просто работать с сокетами без лишних усилий.
Способен получить страницу по HTTP/1.1 и с использованием Keep-Alive-соединения, а также нормально парсит страницы с Transfer-Encoding: chunked.
Кроме того, если страница выдаётся в gzip, то есть возможность автоматической распаковки содержимого.
Класс также поддерживает прокси и может парсить cookies, выдаваемые ему сайтом.
По умолчанию класс работает через функции socket_*** (не поддерживаются денвером), но можно использовать и привычные fsockopen, правда, тогда через Keep-alive работать не получится.
Пример:
<?php /* скрипт получает страницу www.google.ru через HTTP/1.1 и Connection: keep-alive. */ require("websock.php"); //подключение файла с классом //укажите в конструкторе третий параметр false, тогда вместо socket_*** будут использоваться fsock-функции $s=new websock('www.google.ru',80); //создание нового сокета //$s->set_proxy('203.162.2.139','80'); //Если надо прокси, его можно установить следующим образом $s->sconnect(); //подключаем сокет $s->set_connection(1,300); //keep-alive: 300 $s->set_proto('1.1'); //HTTP 1.1 $s->get_header('/'); //формируем заголовок для запроса к серверу (получаем корень http://mail.ru/) $s->swrite(); //пишем его в сокет $ret=$s->http11read(); //универсальная функция чтения из сокета, неважно, какие заданы параметры подключения. Читаем всё возвращённое содержимое. print $ret[0]; //$ret[0] - заголовки, $ret[1] - содержимое $s->sclose(); //закрываем соединение ?>
Ещё пример:
<?php /* скрипт просто получает cookies со страницы http://bash.org.ru */ require("websock.php"); //подключение файла с классом $s=new websock('bash.org.ru',80); //создание нового сокета $s->sconnect(); //подключаем сокет $s->get_header('/'); //формируем заголовок для запроса к серверу (получаем корень http://bash.org.ru/) $s->swrite(); //пишем его в сокет $ret=$s->http11read(); //универсальная функция чтения из сокета, неважно, какие заданы параметры подключения. Читаем всё возвращённое содержимое. print $s->get_cookie($ret[0]); //получаем Cookies в виде строки $s->sclose(); //закрываем соединение ?>
Дополнительные комментарии по всем функциям класса можно найти в его коде.
UPD от 30.03.09: Выкладываю новую версию, в которой добавлена поддержка прокси с паролями, socks5, socks5 с паролями и исправлен парсинг cookies, а также добавлены простые функции get и post.
UPD от 02.04.09: еще некоторые мелкие поправки
UPD от 16.04.09: исправлен косяк при работе с прокси

я :
/* WEBsock class by DX */
дык .. копирайты хотябы указал \=
[Ответить]
dx :
Зачем указывать, класс мой, я и выложил)
[Ответить]
я :
мле ...
я думал тут токо каими постит)
[Ответить]
kraken :
Спасибо большое D_X
[Ответить]
dx :
Кто скачивал, скачайте снова, были некоторые ошибки небольшие, сейчас поправлено вроде всё
[Ответить]
pr :
немогбы ты приветси примры работы с запросами для https....,буду благодарен или ссылки какие небудь:)
[Ответить]
dx:
Апрель 10th, 2009 at 22:51
Этот класс с ssl не работает. Собственно, запрос по ssl в php делается через fsockopen("ssl://сайт",443), но как правило php не поддерживает ssl (не включен или отсутствует соответствующий необходимый модуль).
Поэтому для ssl легче использовать curl.
[Ответить]
dx :
Еще один косяк исправил при работе с проксями.
[Ответить]