¿Hay alguna manera de realizar una solicitud HTTP GET dentro de un script de Visual Basic? Necesito obtener el contenido de la respuesta de una URL particular para su procesamiento.HTTP GET en VBS
Respuesta
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.
En el momento de escribir esto no describió qué va a hacer con la respuesta ni cuál es su tipo de contenido. Una respuesta ya contiene un uso muy básico de MSXML2.XMLHTTP
(recomiendo el MSXML2.XMLHTTP.3.0
progID más explícito). Sin embargo, es posible que deba hacer cosas diferentes con la respuesta, puede que no sea texto.
El XMLHTTP también tiene una propiedad responseBody
que es una versión de matriz de bytes de la reponse y hay una responseStream
que es una envoltura IStream
para la respuesta.
Tenga en cuenta que en un requisito del lado del servidor (por ejemplo, VBScript alojado en ASP), debería usar MSXML.ServerXMLHTTP.3.0
o WinHttp.WinHttpRequest.5.1
(que tiene una interfaz casi idéntica).
Aquí es un ejemplo del uso XmlHttp a buscar un archivo PDF y almacenarlo: -
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
hey anthony! ¿Cómo podríamos especificar las claves de autenticación o solicitar argumentos externamente? o podemos mantener eso como parte de la url. –
@SushantKhurana: Dependerá de lo que el servidor esté esperando. Puede incluir encabezados adicionales en la solicitud con el método addHeader, de modo que si tiene control en ambos extremos, cree un encabezado "x-myheader" personalizado. O puede usar un "POST", agregar un encabezado Content-Type como "application/x-www-form-urlencoded" y pasar un parámetro de contineing de cadena urlencoded al método 'send'. O como dices, incluye los valores en la cadena de consulta. Realmente depende de lo que tienes disponible para ti en el servidor. – AnthonyWJones
Sí. Tengo que hacer eso solo a través de un encabezado de Autorización HTTP básica. Autorización de ejemplo: QWxhZGRpbjpvcGVuIHNlc2FtZQ == –
Si está utilizando la solicitud GET para enviar realmente los datos ...
cheque: http://techhelplist.com/index.php/tech-tutorials/37-windows-troubles/60-vbscript-sending-get-request
El problema con MSXML2.XMLHTTP es que hay varias versiones de él, con diferentes nombres según la versión del sistema operativo de Windows y parches.
esto explica que: http://support.microsoft.com/kb/269238
que he tenido más suerte con VBScript para llamar
set ID = CreateObject("InternetExplorer.Application")
IE.visible = 0
IE.navigate "http://example.com/parser.php?key=" & value & "key2=" & value2
do while IE.Busy....
.... y más cosas, pero sólo para que la solicitud vaya a través.
Eso es feo e ineficiente, ¿por qué harías esto? Cada vez que llamas a este código estás creando una instancia de 'iexplore.exe' en segundo plano que llama a winsock.dll para gestionar la solicitud HTTP, mientras que los objetos Request del HTTP del servidor hacen esto directamente con mucha menos sobrecarga. – Lankymart
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
Necesita hacer algunos comentarios para complementar su código. – theblindprophet
- 1. HTTP SOAP \ GET \ POSTAL
- 2. HTTP GET bajo Qt
- 3. falso peticiones HTTP GET
- 4. Http Get using Android HttpURLConnection
- 5. Obtener argumentos HTTP GET en Python
- 6. Parámetros múltiples en http get request
- 7. Obteniendo variables HTTP GET en Python
- 8. ¿Cómo hago un HTTP GET en Java?
- 9. VBS - Obtener impresora predeterminada
- 10. HTTP GET y POST recomendaciones parámetros
- 11. Solicitud HTTP GET y respuesta XML
- 12. HTTP GET Request, ASP - ¡Estoy perdido!
- 13. longitud máxima de la solicitud HTTP GET?
- 14. petición HTTP GET usando C SIN libCurl
- 15. jQuery Get Request on HTTP URL
- 16. jquery ajax get responseText de URL http
- 17. ¿Cómo hacer un http get en cocoa en el iPhone
- 18. Descargar un archivo con VBS
- 19. ¿Cómo hacer una solicitud HTTP Post/GET en Powershell?
- 20. Http get request tamaño de paquete en bytes
- 21. HTTP GET Código de estado en WebView Android
- 22. ¿Cómo agregar parámetros a una solicitud HTTP GET en Android?
- 23. Problema con petición HTTP GET en el nodo js
- 24. Cómo ver la última solicitud GET HTTP en JavaScript
- 25. cómo hacer la solicitud HTTP GET en Android
- 26. ¿Cómo codifico cadenas de consulta HTTP GET en Perl?
- 27. Detectar si el método HTTP (POST, GET) en jQuery.ajaxComplete()
- 28. HTTP POST y GET con cookies para autenticación en python
- 29. d3 js - cargando json sin un http get
- 30. Android - Lea un archivo XML con HTTP GET
Solo para agregar el tercer parámetro bool se representa si la llamada se va a realizar de manera sincronizada o sincronizada. Valor falso significa que será una llamada síncrona. Además, la API abierta tiene dos parámetros más para que la autenticación pase Userid y contraseña si así lo requiere el sitio web al que se llama. – RBT
Tengo problemas al usar este método de Windows 2012, creo que se debe a la gran cantidad de versiones diferentes publicadas por Microsoft. Estoy pensando en usar otro método para hacer un HTTP Obtener de vbs, alguna idea? –
Ejemplo simple para una pregunta simple. Me llevó 2 horas encontrar esto, que es todo lo que necesitaba. ¡Bravo! – JediPotPie