2008-10-15 43 views

回答

55
Dim o 
Set o = CreateObject("MSXML2.XMLHTTP") 
o.open "GET", "http://www.example.com", False 
o.send 
' o.responseText now holds the response as a string. 
+0

只是添加第三个bool参数表示是否要调用异步或同步。假值意味着它将是一个同步调用。另外,如果被调用的网站需要,开放API还有两个用于身份验证的参数来传递Userid和密码。 – RBT 2016-04-22 10:48:14

+1

我在使用Windows 2012中的这种方法时遇到问题,我认为这是由于微软发布的许多不同版本造成的。我正在考虑使用antoher方法来从vbs中获取HTTP Get任何想法? – 2016-05-11 14:12:55

+0

一个简单问题的简单例子。我花了2个小时才找到这个,这是我所需要的。好样的! – JediPotPie 2017-04-18 17:39:33

35

在撰写本文时,您尚未描述您将如何处理响应或其内容类型。一个答案已经包含了一个非常基本的用法MSXML2.XMLHTTP(我推荐更明确的MSXML2.XMLHTTP.3.0 progID),但是你可能需要对响应做不同的事情,它可能不是文本。

XMLHTTP还有一个responseBody属性,它是响应的字节数组版本,并且有一个responseStream它是响应的一个IStream包装。

请注意,在服务器端要求(例如,ASP托管的VBScript)中,您将使用MSXML.ServerXMLHTTP.3.0WinHttp.WinHttpRequest.5.1(它具有几乎相同的接口)。

下面是使用XMLHTTP获取一个PDF文件,并将其存储的例子: -

Dim oXMLHTTP 
Dim oStream 

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0") 

oXMLHTTP.Open "GET", "http://someserver/folder/file.pdf", False 
oXMLHTTP.Send 

If oXMLHTTP.Status = 200 Then 
    Set oStream = CreateObject("ADODB.Stream") 
    oStream.Open 
    oStream.Type = 1 
    oStream.Write oXMLHTTP.responseBody 
    oStream.SaveToFile "c:\somefolder\file.pdf" 
    oStream.Close 
End If 
+0

嘿安东尼!我们将如何指定身份验证密钥或从外部请求参数?或者我们可以保留这部分网址。 – 2012-06-26 11:09:03

3

如果您使用的是GET请求以实际发送数据...

检查: http://techhelplist.com/index.php/tech-tutorials/37-windows-troubles/60-vbscript-sending-get-request

MSXML2.XMLHTTP的问题是它有几个版本,其中不同的名称取决于Windows操作系统的版本和补丁。

这可以解释它: http://support.microsoft.com/kb/269238

我一直在使用VBScript来调用

set ID = CreateObject("InternetExplorer.Application") 
IE.visible = 0 
IE.navigate "http://example.com/parser.php?key=" & value & "key2=" & value2 
do while IE.Busy.... 

有更多的运气....多的东西,但只是为了让请求走通。

-1
 strRequest = "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" " &_ 
     "xmlns:tem=""http://tempuri.org/"">" &_ 
     "<soap:Header/>" &_ 
     "<soap:Body>" &_ 
      "<tem:Authorization>" &_ 
       "<tem:strCC>"&1234123412341234&"</tem:strCC>" &_ 
       "<tem:strEXPMNTH>"&11&"</tem:strEXPMNTH>" &_ 
       "<tem:CVV2>"&123&"</tem:CVV2>" &_ 
       "<tem:strYR>"&23&"</tem:strYR>" &_ 
       "<tem:dblAmount>"&1235&"</tem:dblAmount>" &_ 
      "</tem:Authorization>" &_ 
     "</soap:Body>" &_ 
     "</soap:Envelope>" 

     EndPointLink = "http://www.trainingrite.net/trainingrite_epaysystem" &_ 
       "/trainingrite_epaysystem/tr_epaysys.asmx" 



dim http 
set http=createObject("Microsoft.XMLHTTP") 
http.open "POST",EndPointLink,false 
http.setRequestHeader "Content-Type","text/xml" 

msgbox "REQUEST : " & strRequest 
http.send strRequest 

If http.Status = 200 Then 
'msgbox "RESPONSE : " & http.responseXML.xml 
msgbox "RESPONSE : " & http.responseText 
responseText=http.responseText 
else 
msgbox "ERRCODE : " & http.status 
End If 

Call ParseTag(responseText,"AuthorizationResult") 

Call CreateXMLEvidence(responseText,strRequest) 

'Function to fetch the required message from a TAG 
Function ParseTag(ResponseXML,SearchTag) 

ResponseMessage=split(split(split(ResponseXML,SearchTag)(1),"</")(0),">")(1) 
Msgbox ResponseMessage 

End Function 

'Function to create XML test evidence files 
Function CreateXMLEvidence(ResponseXML,strRequest) 

Set fso=createobject("Scripting.FileSystemObject") 
Set qfile=fso.CreateTextFile("C:\Users\RajkumarJoshua\Desktop\DCIM\SampleResponse.xml",2) 
Set qfile1=fso.CreateTextFile("C:\Users\RajkumarJoshua\Desktop\DCIM\SampleReuest.xml",2) 

qfile.write ResponseXML 
qfile.close 

qfile1.write strRequest 
qfile1.close 

End Function