Pergunta
Existe uma maneira de executar uma solicitação HTTP em um script Visual Basic? Preciso obter o conteúdo da resposta de um URL específico para processamento.
Solução
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.
Outras dicas
Você não escreveu no momento em que descreveu o que vai fazer com a resposta ou qual é o seu tipo de conteúdo. Uma resposta já contém um uso muito básico de MSXML2.XMLHTTP
(Eu recomendo o mais explícito MSXML2.XMLHTTP.3.0
progid), por mais que você precise fazer coisas diferentes com a resposta, pode não ser texto.
O xmlHttp também tem um responseBody
propriedade que é uma versão de matriz de bytes da resposta e existe um responseStream
que é um IStream
invólucro para a resposta.
Observe que em um requisito do lado do servidor (por exemplo, VBScript hospedado no ASP), você usaria MSXML.ServerXMLHTTP.3.0
ou WinHttp.WinHttpRequest.5.1
(que tem uma interface quase idêntica).
Aqui está um exemplo de uso do XMLHTTP para buscar um arquivo pdf e armazená-lo:-
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
Se você estiver usando a solicitação GET para realmente enviar dados ...
Verifica:http://techhelplist.com/index.php/tech-tutorials/37-windows-troubles/60-vbscript-sending-get-request
O problema com msxml2.xmlHttp é que existem várias versões, com nomes diferentes, dependendo da versão e dos patches do Windows OS.
Isso explica:http://support.microsoft.com/kb/269238
Eu tive mais sorte usando o VBScript para ligar
set ID = CreateObject("InternetExplorer.Application")
IE.visible = 0
IE.navigate "http://example.com/parser.php?key=" & value & "key2=" & value2
do while IE.Busy....
.... e mais coisas, mas apenas para deixar a solicitação passar.
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