Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе приведен пример написания скрипта, который получает данные через службы HTTP Microsoft Windows (WinHTTP) синхронно или асинхронно. Основные понятия, показанные в этом примере, предоставляют основу для написания клиентских или серверных приложений среднего уровня, требующих доступа к данным с помощью протокола HTTP.
- предварительные условия и требования
- Синхронное извлечение данных
- асинхронно получение данных
- Связанные темы
Предварительные условия и требования
Помимо рабочих знаний Microsoft JScript, в этом примере требуется следующее:
- Текущая версия пакета средств разработки программного обеспечения Microsoft Windows (SDK).
- Средство настройки прокси-сервера для установки параметров прокси-сервера для служб HTTP Microsoft Windows (WinHTTP), если подключение к Интернету осуществляется через прокси-сервер. Дополнительные сведения см. в разделе ProxyCfg.exe, средство настройки прокси-сервера.
- Знакомство с сетевой терминологией и понятиями.
Получение данных синхронно
Чтобы создать скрипт, который получает текст из веб-страницы синхронно, сделайте следующее:
Откройте текстовый редактор.
Скопируйте следующий код в текстовый редактор.
function getText(strURL) { var strResult; try { // Create the WinHTTPRequest ActiveX Object. var WinHttpReq = new ActiveXObject( "WinHttp.WinHttpRequest.5.1"); // Create an HTTP request. var temp = WinHttpReq.Open("GET", strURL, false); // Send the HTTP request. WinHttpReq.Send(); // Retrieve the response text. strResult = WinHttpReq.ResponseText; } catch (objError) { strResult = objError + "\n" strResult += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString() + "\n\n"; strResult += objError.description; } // Return the response text. return strResult; } WScript.Echo(getText("https://www.microsoft.com/default.htm"));Сохраните файл как "Retrieve.js".
В командной строке введите "cscript Retrieve.js" и нажмите клавишу ВВОД.
Теперь у вас есть скрипт, использующий объект WinHttpRequest для получения исходного кода HTML для веб-страницы в https://www.microsoft.com. Возможно, потребуется подождать несколько секунд, пока код не появится.
Приложение содержит только одну функцию getText. Первая строка скрипта создает объект WinHttpRequest.
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
Когда модуль JScript встречает эту строку, он создает экземпляр этого объекта. Если вы видите сообщение об ошибке "Компонент ActiveX не может создать объект" на этой строке, скорее всего, WinHttp.dll не был правильно зарегистрирован или отсутствует в системе.
Следующая строка скрипта вызывает метод Open.
// Create an HTTP request.
WinHttpReq.Open("GET", "https://www.microsoft.com", false);
Три параметра указывают, какой глагол HTTP использовать, имя ресурса и использовать ли WinHTTP синхронно или асинхронно. В этом примере метод использует команду HTTP HTTPGET для получения данных из https://www.microsoft.com. Указание FALSE для последнего параметра определяет, что транзакция выполняется синхронно. Метод Openне устанавливает подключение к ресурсу, как может подразумеваться из названия. Скорее, он инициализирует внутренние структуры данных, которые поддерживают сведения о сеансе, подключении и запросе.
Метод отправкисобирает заголовки запроса и отправляет запрос. При вызове в синхронном режиме метод отправки также ожидает ответа, прежде чем разрешить приложению продолжить работу.
// Send the HTTP request.
WinHttpReq.Send();
После отправки запроса скрипт возвращает значение свойства ResponseText объекта WinHttpRequest. Это свойство содержит тело сущности ответа, в данном случае источник документа.
// Get the response text.
return WinHttpReq.ResponseText;
Выполнение скрипта приостанавливается, пока извлекается весь текст ресурса. Текст ресурса возвращается из функции и отображается.
Объект WinHttpRequest гарантирует освобождение всех внутренних ресурсов, выделенных для HTTP-транзакции.
Получение данных асинхронно
Получение данных асинхронно с помощью WinHTTP очень похоже на получение данных синхронно. Измените сценарий из предыдущего раздела, выполнив два небольших изменения.
Задайте третий параметр метода Open значение true вместо false, чтобы указать, что методы WinHTTP должны выполняться асинхронно.
// Create a HTTP request. var temp = WinHttpReq.Open("GET", strURL, true);Вызовите метод WaitForResponse перед доступом к свойству ResponseText, чтобы убедиться, что весь ответ получен.
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
Основное преимущество использования WinHTTP асинхронно в скрипте состоит в том, что метод Send возвращается немедленно. Запрос подготавливается и отправляется рабочим потоком. Это позволяет приложению выполнять другие действия во время ожидания ответа. Прежде чем пытаться получить доступ к ответу, убедитесь, что весь ответ получен путем вызова метода WaitForResponse. В противном случае может возникнуть ошибка.
МетодWaitForResponse также можно использовать для указания значения времени ожидания транзакции. Необязательный параметр позволяет указать значение времени ожидания в секундах.
Связанные разделы