Print This Post Класс для работы с сокетами

Суббота, 21. Март 2009
Раздел: PHP, автор:

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: исправлен косяк при работе с прокси

Скачать класс в zip

Также рекомендую почитать

 Обсудить на форуме


Получать обновления на почту:     

Метки: , , .

Комментариев: 8 к “Класс для работы с сокетами”


  1. я :

    /* WEBsock class by DX */
    дык .. копирайты хотябы указал \=

    [Ответить]


  2. dx :

    Зачем указывать, класс мой, я и выложил)

    [Ответить]


  3. я :

    мле ...
    я думал тут токо каими постит)

    [Ответить]

  4. Спасибо большое D_X

    [Ответить]


  5. dx :

    Кто скачивал, скачайте снова, были некоторые ошибки небольшие, сейчас поправлено вроде всё

    [Ответить]


  6. pr :

    немогбы ты приветси примры работы с запросами для https....,буду благодарен или ссылки какие небудь:)

    [Ответить]

    dx:

    Этот класс с ssl не работает. Собственно, запрос по ssl в php делается через fsockopen("ssl://сайт",443), но как правило php не поддерживает ssl (не включен или отсутствует соответствующий необходимый модуль).
    Поэтому для ssl легче использовать curl.

    [Ответить]


  7. dx :

    Еще один косяк исправил при работе с проксями.

    [Ответить]


Оставьте ваш комментарий