使用脚本检索数据
本主题包含一个示例,说明如何编写通过 Microsoft Windows HTTP Services (WinHTTP) 同步或异步获取数据的脚本。 此示例中演示的概念为编写需要使用 HTTP 协议访问数据的客户端或中间层服务器应用程序提供了基础。
先决条件和要求
除了 Microsoft JScript 的实践知识外,此示例还要求满足以下条件:
- Microsoft Windows 软件开发工具包的当前版本 (SDK) 。
- 如果通过代理服务器连接到 Internet,则为 Microsoft Windows HTTP Services (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”,然后按 Enter。
现在,你有一个脚本,该脚本使用 WinHttpRequest 对象来获取 网页 https://www.microsoft.com的 HTML 源代码。 可能需要等待几秒钟才能显示代码。
应用程序仅包含一个函数“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();
发送请求后,脚本将返回 WinHttpRequest 对象的 ResponseText 属性的值。 此属性包含响应的实体正文,在本例中为文档源。
// 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);
在访问 ResponseText 属性之前调用 WaitForResponse 方法,以确保已收到整个响应。
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
在脚本中异步使用 WinHTTP main优点是 Send 方法会立即返回。 请求由工作线程准备和发送。 这使应用程序能够在等待响应时执行其他操作。 在尝试访问响应之前,请确保已通过调用 WaitForResponse 方法收到整个响应。 否则可能会发生错误。
WaitForResponse 方法还可用于指定事务的超时值。 使用可选参数可以指定以秒为单位的超时值。
相关主题