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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top