Получение данных с помощью скрипта
В этом разделе приведен пример создания скрипта, который получает данные через службы Microsoft Windows HTTP (WinHTTP) синхронно или асинхронно. Концепции, продемонстрированные в этом примере, обеспечивают основу для написания клиентских или серверных приложений среднего уровня, которым требуется доступ к данным по протоколу HTTP.
- Предварительные требования и требования
- Синхронный получение данных
- Асинхронный получение данных
- Связанные темы
Предварительные требования и требования
Помимо рабочих знаний о Microsoft JScript, в этом примере требуется следующее:
- Текущая версия пакета sdk для Microsoft Windows.
- Средство настройки прокси-сервера для установки параметров прокси-сервера для служб 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-команду GET для получения данных из https://www.microsoft.com. Если задать значение FALSE для последнего параметра, транзакция выполняется синхронно. Метод Open не устанавливает подключение к ресурсу, как это может означать имя. Вместо этого она инициализирует внутренние структуры данных, которые содержат сведения о сеансе, подключении и запросе.
Метод Send собирает заголовки запроса и отправляет запрос. При вызове в синхронном режиме метод Send также ожидает ответа, прежде чем позволить приложению продолжить работу.
// 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;
Преимуществом main асинхронного использования WinHTTP в скрипте является то, что метод Send возвращает немедленно. Запрос подготавливается и отправляется рабочим потоком. Это позволяет приложению выполнять другие действия в ожидании ответа. Прежде чем пытаться получить доступ к ответу, убедитесь, что весь ответ получен, вызвав метод WaitForResponse . В противном случае может возникнуть ошибка.
Метод WaitForResponse также можно использовать для указания значения времени ожидания для транзакции. Необязательный параметр позволяет указать значение времени ожидания в секундах.
Связанные темы