PHP-обертка для HTTP_GET на socket_XXX

Александр17 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
24.03.2012

Необходимо написать функцию-обертку для 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.

Заявки фрилансеров