-1

我有一个从第 3 方应用程序调用的 VBScript,该脚本从第 3 方应用程序获取数据,并通过以 POST 格式传递数据在 IE 浏览器中打开 URL。当我使用 http 作为协议时,该脚本工作正常,但在我使用 https 的那一刻,服务器端代码 (request.getParameter("param1")) 抱怨它无法在请求对象中找到参数。通过传递 URL 和数据调用脚本。例如 run.vbs https://xyz.com?param1=1234。以下是 vbscript 供您仔细阅读。当我使用 https 作为协议时,你能告诉我我缺少什么吗?非常感谢任何帮助。非常感谢。

If WScript.Arguments.Count = 1 Then
uri = WScript.Arguments.Item(0)
'WScript.Echo "Arguments " & uri
Set WshNetwork = WScript.CreateObject("WScript.Network")
'WScript.Echo "Current User Name: " & WshNetwork.UserName
filename="C:\Documents and Settings\"+WshNetwork.UserName+"\Application Data\XYZ\Profiles\default\Settings.xml"
'WScript.Echo "Current User fileName: " & filename

Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load(filename)
strQuery = "Agent"
Set colItem = xmlDoc.getElementsByTagname(strQuery)
For Each objItem in colItem
    Agentid = objItem.getAttribute("Login")
    'MsgBox "AgentId = " + AgentID
Next

'uri = uri+"^&agentid="+Agentid
uri = uri+"&agentid="+Agentid
pos = InStr(uri,"?")
extracteduri = Mid(uri,1,pos-1)
params = Mid(uri, pos+1)
postdata = Str2Bytes(params,"us-ascii")
header = "Content-Type: application/x-www-form-urlencoded"

Set IE = CreateObject("InternetExplorer.Application")
'IE.Navigate "about:blank"
'IE.AddressBar = True
'IE.ToolBar = True
'IE.StatusBar = True
IE.Visible = True
'WScript.Sleep 2000
Set shl = WScript.CreateObject("WScript.Shell")
shl.SendKeys "% X" 
IE.Navigate extracteduri, Nothing, Nothing, postdata, header
Wscript.Quit
 Else
Wscript.Echo "Usage: RunURL.vbs <URL to invoke>"
Wscript.Quit
 End If
 Function Str2Bytes(Text, CharSet)
Const adTypeText = 2
Const adTypeBinary = 1

  'Create Stream object
  Dim BinaryStream 'As New Stream
  Set BinaryStream = CreateObject("ADODB.Stream")

  'Specify stream type - we want To save text/string data.
  BinaryStream.Type = adTypeText

  'Specify charset For the source text (unicode) data.
  If Len(CharSet) > 0 Then
    BinaryStream.CharSet = CharSet
  Else
    BinaryStream.CharSet = "us-ascii"
  End If

  'Open the stream And write text/string data To the object
  BinaryStream.Open
  BinaryStream.WriteText Text

  'Change stream type To binary
  BinaryStream.Position = 0
  BinaryStream.Type = adTypeBinary

  'Ignore first two bytes - sign of
  BinaryStream.Position = 0

  'Open the stream And get binary data from the object
  Str2Bytes = BinaryStream.Read
End Function

我现在正在使用以下函数从服务器获取响应,使用 https 作为协议和 POST 作为格式,但服务器仍然无法看到参数

Set req = CreateObject("MSXML2.ServerXMLHTTP")
'Set the below option to get rid of the "Certificate authority is invalid or     
     'incorrect, error code - 80072F0D" error
req.setOption 2, 13056
req.open "POST", extracteduri, False
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
encodedParams = Escape(params)
WScript.Echo "encodedParams: " & encodedParams
req.send encodedParams
WScript.Echo "req.responseText: " & req.responseText

下面是编码后的参数 uui%3DU1%3D123456%26agentid%3D123456

服务器仍然抱怨请求对象中缺少参数。

我正在使用相同的脚本(XMLHTTP 请求),但我正在使用 Str2Bytes 函数(如上所述)加密参数

Set req = CreateObject("MSXML2.ServerXMLHTTP")
req.setOption 2, 13056
req.open "POST", extracteduri, False
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
req.send postdata
WScript.Echo "req.responseText: " & req.responseText
4

1 回答 1

0

我建议使用一个XMLHTTPRequest而不是 Internet Explorer COM 对象。有关示例,请参见此处。请注意,您必须对发布数据中的特殊字符进行编码。

但是,如果您无论如何都想在 IE 中打开 URL,您可能最好坚持原来的方法。在这种情况下,我会检查服务器以获取有关服务器端为什么认为它找不到参数的更多信息。请求甚至有一个名为的参数"param1"吗?

于 2013-04-02T18:05:35.100 回答