Функция httpverOKO, приведенная далее, проверяет, поддерживает ли протокол HTTP версии 1.1 сервер, обрабатывающий запрос. // Возвращает true, если у протокола HTTP версия 1.1 или больше. bool Download: :httpverOK (HINTERNET hlurl) { Char str[80]; unsigned long len = 79; II Получает версию протокола HTTP. if(!HttpQueryinfо(hlurl, HTTP_QUERY_VERSION, &str, &len, NULL)) return false; 11 Сначала проверяет главный номер версии HTTP, char *р = strchr(str, 'Г); P++; // Теперь находит начало младшего номера версии HTTP. р = strchr(str, ' .'); Р++; // Преобразует в тип int. int minorVerNum = atoi(p); if(minorVerNum > 0) return true; return false; } Функции httpverOKO передается дескриптор URL-адреса. Далее извлекается Версия HTTP (В СТРОКОВОЙ форме) С ПОМОЩЬЮ ВЫЗОВа фунКЦИИ HttpQueryInfo() для этого дескриптора и задания константы HTTP_QUERY_VERSION, которая запрашивает информацию о версии. Этот запрос сохраняет строку с номером версии в переменной str. В случае протокола HTTP версии 1.1 строка будет выглядеть следующим образом: HTTP/1.1 Функция устанавливает переменную р для указания на символ "/" с помощью вызова функции strchr о из стандартной библиотеки. Та, в свою очередь, увеличивает указатель р на единицу и подтверждает, что он ссылается на цифру, отличную от нуля. Далее находится указатель на точку, отделяющую номер главной версии от номера подверсии, и затем указатель перемещается для ссылки на начало числа, следующего за точкой. В завершение, это строковое значение с помощью стандартной библиотечной функции atoi о преобразуется в целое число. Если номер подверсии не меньше 1, версия протокола HTTP не меньше 1.1.
|