Объекты вида XMLHTTP — Обработка заголовков HTTP запроса

Объекты вида XMLHTTP — Обработка заголовков HTTP запроса Объектная модель Windows Script Host

Приветствую всех, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим компоненты для отправки HTTP запросов программными средствами сервера Windows Script Host.

В предыдущих публикациях я приводил несколько примеров для работы с HTTP запросами – сканер IP адресов и поиск битых ссылок, в одном примере использовался объект MSXML2.XMLHTTP, во втором WinHttp.WinHttpRequest, фактически, они по логике работы идентичны и один можно заменить другим, есть и другие компоненты что бы отправить HTTP запрос, например, Microsoft.XMLHTTP или MSXML2.ServerXMLHTTP, я поместил библиотеки с компонентами в  архив (ссылка ниже). Для регистрации компонента запустите Пуск/Выполнить REGSVR32 "Путь к компоненту". Вы можете запустить реестр (Пуск/Выполнить regedit) и просто ввести в поиске имя компонента, возможно он уже присутствует в системе.

Так как на блоге будут статьи с примерами для работы с заголовками HTTP запроса, то тут я хочу привести основные методы и свойства упомянутых выше компонентов. Дело в том, что все они по своей природе идентичны, поэтому, их свойства и метода содержат одинаковый синтаксис.

Компоненты для формирования HTTP запроса

Методы

Open(method, URL, type, userName, password) – определяем метод (method) с помощью которого будет происходить отправка запроса HTTP, например: GET – передача данных серверу через URL адрес, POST — передача данных серверу, используя тело HTTP запроса. Адрес (URL) интернет ресурса, которому в будущем будет отправляться запрос HTTP, можно указать как название домена, так и IP адрес. Тип режима (type) – может принимать два значения true  — код будет выполняться, не ожидая ответа от сервера или false – сценарий остановит работу до возврата сервером ответа на запрос, username, password – указываем логин и пароль, если есть надобности в авторизации.

Send(data) – Собственно, отправка HTTP-запроса, тут data – данные для отправки, могут отсутствовать. Возвращаемая информация может быть проверена с помощью методов вида getAllResponseHeader или getResponseHeader, а также, свойства с префиксом response.

setRequestHeader(name, value) — Устанавливает заголовок HTTP запроса, тут name – название, запроса со значением value. Если заголовок с таким именем уже есть — он заменяется. Например:

  • xmlhttp.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’)
  • User-Agent», «Godzulla/4.0 (compatible; MyApp 1.0; Windows NT 5.1)

Заголовки в основном предназначены для информирования – дата, тип браузера, куки и так далее, хотя могут быть и произвольного характера, например, HTTP запрос:

  • X-hacker: If you’re reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.

getAllResponseHeaders() — Возвращает строку ответа сервера со всеми заголовками. Например, мы можем получить ответ вида:

  • Content-Type: text/html
  • Expires: Wed, 15 Aug 2012 14:15:52 GMT
  • Cache-Control: public
  • Content-Encoding: gzip
  • Content-Length: 20583
  • Accept-Ranges: bytes
  • Date: Wed, 15 Aug 2012 14:15:22 GMT
  • Age: 14
  • Connection: keep-alive
  • Server: ninja web server 1.3.3.7

getResponseHeader(headerName) — Возвращает значение заголовка ответа сервера с именем headerName, например, можно указать Date, User-Agent и так далее.

Abort() — Позволяет отменить текущий HTTP запрос, реализованный с помощью метода send, удаляет все заголовки HTTP запроса, ставит текст ответа сервера в null.

Свойства

responseText — Хранит ответ в виде строк текста, фактически, мы получим HTML текст страницы. Если состояние не 3 или 4, возвращает пустую строку.

responseXML — Хранит ответ в виде XML. Если состояние 4, возвращает пустую строку.

responseBody — Получает тело ответа лица в виде массива байтов без знака, используется при закачке бинарного файла

Status — Статусный код ответа сервера на запрос HTTP: 200 — OK, 404 – Не найдено, и т.п.

statusText — Текстовая расшифровка свойства status, например «Not Found» или «OK».

Хорошо, с теоретической стороной мы разобрались, теперь можно приступить к программированию.

Полученная информация от сервера – заголовки HTTP запроса

HTTP заголовки запроса

И так, с теорией мы закончили, теперь давайте приступим к практической стороне работы с заголовками HTTP запроса. Если у вас есть сайт, или установлен веб сервер Денвер, то, создаем файл tester.php,  прописываем в нем строки кода и помещаем в корневую папку. И так открываем редактор Notepad++ и прописываем следующий код:

<?php// Функция выводит два текстовых поляfunction mess_form(){print"<form action=tester.php method=POST><textarea name=body1 cols=10 rows=5></textarea><br><textarea name=body2 cols=10 rows=5></textarea><br><input type=submit></form>";exit;}if($_POST['body1']=='')mess_form();// Выводим переданные данныеprint"<br><b>Text1:</b>".$_POST['body1'];print"<br><b>Text2:</b>".$_POST['body2'];?>

Как видим, скрипт будет выводить два текстовых поля, если первое поле заполнено, то будет происходить вывод заполненных данных. Можете протестировать скрипт… Теперь создадим файл tester.js, он будет отправлять данные php скрипту:

var WinHttpRequest,MSG;WinHttpRequest=new ActiveXObject("WinHttp.WinHttpRequest.5.1");MSG="body1=Pervoye pole&body2=Vtoroye pole";WinHttpRequest.open("POST","http://site.ru/tester.php",false);WinHttpRequest.SetRequestHeader("User-Agent","Godzilla/4.0 (compatible; MyApp 1.0; Windows NT 5.1)");WinHttpRequest.send(MSG);//Выводим список всех заголовков HTTP запросаWScript.echo(WinHttpRequest.getAllResponseHeaders());//Выводим ответ в виде текстаWScript.echo(WinHttpRequest.ResponseText);

Скрипт отправляет запрос HTTP на страницу http://site.ru/tester.php, мы установили заголовок User-Agent – говорим, что мы типа с браузера Godzilla :) . Переменная MSG хранит строку, которую надо передать, фактически, мы говорим: «надо заполнить поле body1 и поле body2».  В конце, мы выводим два окна, первое показывает все HTTP заголовки, а второе HTML код.

запрос HTTP

Данная публикация по работе с HTTP является не полной, так как в ней не рассмотрен пример для закачки файла и многое другое, просто, я решил не превращать материал в справочный хлам, удобней написать отдельную публикацию с примерами и разъяснениями. Так, я использовал компонент для отправки данных, при написании скрипта для поиска битых ссылок, далее была опубликована публикация для сканера IP адресов и сканера портов. В статье «Штурмуем  протокол HTTP» был написан скрипт для отправки данных с помощью заданных методов и составления собственных значений для полей. Как видите, я стараюсь анализировать и дополнять материалы сайта примерами.

Скачать компоненты

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий