Работа с сокетами fsockopen из php
[к содержанию]
В данной статье хочу поделиться с Вами, уважаемые читатели, личным опытом использования fsockopen на языке php.
Для начала к вопросу о том, для чего вообще нужны сокеты ?
Рассмотрим небольшой пример.
<?php
$ret = "\r\n"; //каждая строка запроса должна завершаться символами возврата курсора
//и перевода строки
$host = 'varve.ru'; //указываем сайт, к которому адресуем запрос
$fsocket_connect = fsockopen($host, 80, $errno, $errstr, 30); //выполняем соединение, через
//порт 80, errno - код ошибки, errstr - описание ошибки,
//ожидание соединения до 30 сек
if ( !$fsocket_connect ) {
echo $errstr." (".$errno.")<br>\n"; //выводим код ошибки, если соединение не удалось
}
else {
//формируем строки нашего HTTP запроса -
$out = "GET / HTTP/1.1".$ret; //запрос GET по протоколу http 1.1
$out .= "Host: ".$host.$ret; //адрес хоста (сайта)
$out .= "Connection: Close".$ret.$ret; //команда закрытия соединения
$responce = ''; //в этой переменной получим ответ
fwrite($fsocket_connect, $out); //выполняем запись в открытый сокет - т. е. выполняем запрос
while (!feof($fsocket_connect)) //выполняем чтение из сокета - пока не будет получен сигнал конца потока - т. е. получаем ответ {
$responce .= fgets($fsocket_connect, 128); //строки ответа заносим в переменную responce
}
fclose($fsocket_connect); //закрываем сокет
$responce = explode($ret, $responce); //выполняем разбиение ответа (responce) на массив строк
echo '<pre>';
var_dump($responce); //выводим содержимое переменной responce
echo '</pre>';
}
?>
Если вы разместите данный код в файле php скрипта и выполните его, то в переменной responce получите ответ сайта varve.ru по запросу записанному в строках с переменной $out.
Т. е. сокеты нужны, для того чтобы выполнять TCP/IP запросы (request) и получать ответы (responce) на них.
Сокеты широко используются в различных скриптах и программах для обхода содержимого сайтов, а также выполнения на них каких-либо автоматизированных действий - например автоматический постинг на форуме.
Таким образом скрипт превращается в робота, который по заданному алгоритму может оставлять посты на форуме без вашего участия. Такой скрипт может работать через
cron, т. е. планировщик задач. В заданное время скрипт будет запускаться и выполнять полезную работу.
Если подвести итог, то сокеты позволяют вам работать с содержимым сайтов на программном уровне - выполняя обращения к сайту посредством скрипта или программы, без участия или с минимальным участием человека.
Конечно, чтобы писать запросы и корректно обрабатывать результаты потребуются дополнительные знания. Кроме того, для работы с конкретным сайтом через сокет нужно будет знать и учитывать множество особенностей и нюансов. Их рассмотрение выходит за рамки данной статьи, но всё же кое о чём я могу вам рассказать.
Почерпнуть информацию о том, как выполняются запросы и ответы к конкретному сайту через обычный браузер, получая при этом полную информацию о выполняемом запросе и ответе можно при помощи специальных инструментов. Например браузер Google Chrome по нажатию на клавишу [F12] выдает панель инспектора кода. Используя её и вкладку Network можно исследовать выполняемый к сайту запрос и узнать всё необходимое.
Алгоритм действий тут примерно такой - включаем браузер Google Chrome, вызываем инспектор кода по [F12].
Открываем вкладку Network. Обычным способом переходим на нужную страницу сайта (не закрывая инспектор кода).
При этом получим полный список обращений к различным файлам. Главный файл, к которому идёт обращение обычно расположен в самом начале, поэтому
прокручиваем полосу прокрутки на начало и кликаем этот файл.
Получаем всю необходимую информацию - полный URL запроса (Request URL), результат выполнения - 200 - т. е. ОК, какой заголовок запроса Request Headers и какой
заголовок ответа Responce Headers был получен.
Т. е. тут можно найти всё что нужно, чтобы написать запросы для обращений к сайту посредством сокетов.
В наше время информационного бума уже нереально рассчитывать только на собственные силы - нужно использовать роботов, хотя бы программных, которые могут и должны выполнять те или иные рутинные, большие по объёму и времени задачи, такие как сбор нужной информации с сайтов и её обработка.
Всё это можно реализовать с использованием сокетов. Я надеюсь еще вернуться к теме сокетов в последующих статьях, т. к. тема достаточно обширна.
Спасибо за внимание и проявленный интерес к статье.
[к содержанию]