BitTorrent Трекер RusTrek.ru http://5.45.70.241/ |
|
Учимся работать с сокетами. Небольшой пример получения контента странички http://5.45.70.241/viewtopic.php?f=680&t=54175 |
Страница 1 из 1 |
Автор: | RusTrek [ 2012-09-18 02:59 ] |
Заголовок сообщения: | Учимся работать с сокетами. Небольшой пример получения контента странички |
В данной статье я хочу показать пример небольшой пример работы с сокетами в php, а именно получение контента странички (её html кода). Зачем это нужно? Ведь можно же просто воспользоваться функцией file_get_content. Так вот не на всех хостингах включена опция доступа по урлам ![]() Вот небольшой примерчик класса работы с сокетами Код: class socket { public function socket($url) { $url = substr($url,7); $timeout = 30; // Max time for stablish the conection $server = substr($url,0,strpos($url,'/')); // IP address $url = substr($url,strpos($url,'/')); $host = $server; // Domain name $target = substr($url,0,strpos($url,'?')); // Specific program $referer = A_URL; // Referer $port = 80; $getValues = substr($url,strpos($url,'?')); $request = "GET $target$getValues HTTP/1.1\r\n"; $request .= "Host: $host\r\n"; $request .= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) '; $request .= "Gecko/20021204\r\n"; $request .= 'Accept: '; $request .= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,'; $request .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $request .= "Connection: close\r\n\r\n"; $socket = fsockopen( $server, $port, $errno, $errstr, $timeout ); if (!$socket) { echo "$errstr ($errno)<br>\n"; exit; } else { fwrite( $socket, $request ); $ret = ''; while ( !feof( $socket ) ) { $ret .= fgets( $socket, 4096 ); } fclose( $socket ); return $ret; } } } А теперь разберём его подробно ![]() Заголовок нашей функци public function socket($url) говорит о том, какой метод мы вызываем и с каким параметром. Думаю нет смысла обяснить что значит параметр $url ![]() Первым делом мы как всегда производим конфигурирование Код: $url = substr($url,7); $timeout = 30; // Максимальное время ответа $server = substr($url,0,strpos($url,'/')); // сервер $url = substr($url,strpos($url,'/')); $host = $server; // Доменное имя $target = substr($url,0,strpos($url,'?')); // обрубываем урл и оставляем нужные заголовки $port = 80; // Указываем Далее вы должны собрать строку заголовка которую мы пакетом отправим на сервер. Код: $request = "GET $target$getValues HTTP/1.1\r\n"; $request .= "Host: $host\r\n"; $request .= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) '; $request .= "Gecko/20021204\r\n"; $request .= 'Accept: '; $request .= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,'; $request .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $request .= "Connection: close\r\n\r\n"; Подробнее о заголовках я расскажу в своей следующей статье на тему сокетов. Теперь полученные заголовки нам необходимо отослдать на сервер для чего мы и будем использовать сокеты.Первым делом нам необходимо открыть сокет: Код: $socket = fsockopen( $server, $port, $errno, $errstr, $timeout ); Далее производим отправку нужного нам заранее сгенерированого пакета Код: if (!$socket) { echo "$errstr ($errno)<br>\n"; exit; } else { fwrite( $socket, $request ); И читаем ответ сервера Код: $ret = ''; while ( !feof( $socket ) ) { $ret .= fgets( $socket, 4096 ); Закрываем сокет и возвращаем ответ Код: fclose( $socket ); return $ret; Всё очень просто ![]() общее использование класса $content = new Socket(‘http://newsrbk.ru/’); результатом будет запись в переменную $content всего содержимого странички Кто не понял как вывести переменную $content вот пример: Код: $content = new Socket('http://newsrbk.ru/');
echo $content; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |