PHP-обертка для HTTP_GET на socket_XXX
Необходимо написать функцию-обертку для socket_ функций, реализующую следующий алгоритм :
int HTTP_GET_Client ($url,$timeout, $result, $headers);
1) Подключиться к веб-серверу.
2) Отправить запрос .
3) Вернуть результат.
Требования :
1) реализовано только с использованием функций socket_XXX, без curl, и fsock..
2) реализовано с использованием неблокирующих сокетов - на этапе коннекта, отправки, получения данных, закрытия.
3) жестко проверяются таймауты.
4) поддержка ответа с content-size и без content-size - если указан content-size, то читается в соответствии с ним. Если не указан - пока не будет закрытия сокета со стороны сервера, либо таймаута.
5) $result - хранит в себе бинарные данные - то, что идет после заголовков.
6) $headers - ассоц. массив полученных заголовков.
7) В запросе поддерживается только GET, протокол - HTTP без SSL
8) keepalive не поддерживается.
9) каждый шаг проверяется на ошибку, в случае ошибки - возвращается код ошибки.
10) url: string, timeout: float, milliseconds
11) если часть данных принята, но время истекло == ошибка.
12) код должен быть хорошо документирован т.к. это будет часть публичного модуля.
Для тестирования реализовать однопоточный мини-вебсервер, который выполняет следующие задачи :
1) отвечает на connect с рандомной задержкой в заданном диапазоне (конфигурируется через сорцы)
2.1) после коннекта отдает content-length и остальные заголовки, а само тело отправляет по кусочкам, с задержкой между отправками порций (величина задержки конфигурируется).
2.2) после коннекта отдает заголовки и данные порциями, с задержкой (конфигурируемой), но без content-length.