VBScript WinHTTPRequest报错:调用Open前无法执行此方法
问题分析与解决方案
你的错误提示看似矛盾,但核心原因是**Open方法并未真正成功执行**——因为你启用了On Error Resume Next,导致Open阶段的错误被隐藏,后续调用Send时对象状态异常,才抛出这个误导性的错误。
具体原因及修复步骤:
myURL变量未定义或为空:
代码中直接使用myURL但未赋值(比如没提前写myURL = "https://目标地址"),会导致Open方法执行失败,但On Error Resume Next跳过了错误检查,后续操作自然报错。
修复:确保myURL被赋值为有效URL字符串,添加:Dim myURL myURL = "https://example.com/你的目标资源地址"GXP_USER_LOGIN/GXP_USER_PASSWORD未定义:
这两个变量未提前声明赋值,调用SetCredentials时会触发错误,虽然On Error Resume Next不会立刻弹窗,但会导致WinHttpRequest对象状态紊乱,间接引发Send时的错误。
修复:声明并赋值这两个变量:Dim GXP_USER_LOGIN, GXP_USER_PASSWORD GXP_USER_LOGIN = "你的用户名" GXP_USER_PASSWORD = "你的密码"临时关闭错误忽略排查真实问题:
暂时注释掉On Error Resume Next,运行脚本就能看到Open方法执行时的真实错误(比如URL无效、变量未定义等),针对性解决后再恢复错误处理。
修复后的示例代码:
Dim WinHttpReq, strFile, strMsg Dim Status, StatusText Dim myURL, GXP_USER_LOGIN, GXP_USER_PASSWORD ' 赋值必要变量 myURL = "https://example.com/你的目标地址" GXP_USER_LOGIN = "你的用户名" GXP_USER_PASSWORD = "你的密码" Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") WinHttpReq.open "GET", myURL, false If Err.Number <> 0 Then MsgBox "Error at Open() method : " & Err.Description WScript.Quit End If WinHttpReq.SetCredentials GXP_USER_LOGIN,GXP_USER_PASSWORD,0 WinHttpReq.SetTimeouts 0,60000,60000,60000 WinHttpReq.Send If Err.Number <> 0 Then MsgBox "Error at Send() method : " & Err.Description End If On Error GoTo 0
内容的提问来源于stack exchange,提问作者bluefox
相关产品推荐
相关产品推荐

