-1

サードパーティのアプリケーションから呼び出される VBScript を使用しています。スクリプトはサードパーティのアプリケーションからデータを取得し、データを 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

XMLHTTPRequestInternet Explorer COM オブジェクトの代わりに を使用することをお勧めします。例については、こちらを参照してください。投稿データでは特殊文字をエンコードする必要があることに注意してください。

ただし、とにかく IE で URL を開きたい場合は、おそらく元のアプローチに固執することをお勧めします。その場合、サーバー側がパラメーターを見つけられないと考える理由について、サーバーをチェックします。リクエストには という名前のパラメータさえあります"param1"か?

于 2013-04-02T18:05:35.100 に答える