parser parsejson msxml2 leer importar example datos http vba msxml xmlhttprequest

http - parsejson - vba json parser example



El método de envío MSXML2.XMLHTTP funciona con el enlace anticipado, falla con el enlace tardío (3)

El código a continuación funciona. Pero si comento la línea Dim objRequest As MSXML2.XMLHTTP y descomente la línea Dim objRequest As Object , falla con el mensaje de error:

El parámetro es incorrecto

¿Por qué y qué (si hay algo) puedo hacer al respecto?

Public Function GetSessionId(strApiId, strUserName, strPassword) As String Dim strPostData As String Dim objRequest As MSXML2.XMLHTTP ''Dim objRequest As Object '' strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword Set objRequest = New MSXML2.XMLHTTP With objRequest .Open "POST", "https://api.clickatell.com/http/auth", False .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" .send strPostData GetSessionId = .responseText End With End Function

Corey, sí, sé que tendría que hacer eso para que mi código funcione sin una referencia a la biblioteca de tipos MSXML. Ese no es el problema aquí. El código falla al usar Dim objRequest As Object independientemente de si uso

Set objRequest = NEW MSXML2.XMLHTTP con la referencia, o

Set objRequest = CreateObject("MSXML2.XMLHTTP") sin la referencia.


Si usa el objeto Obs objRequest As, entonces necesitaría codificar:
Establecer objRequest = CreateObject ("MSXML2.XMLHTTP")


Me doy cuenta de que esto es casi idéntico al código de Tomalek anterior (¡todo crédito debido a ti!), Pero esta pregunta me ayudó a encontrar una solución completa a un problema que tenía (Excel enviando al servidor PHP, luego tratando con la respuesta) ... entonces, en caso de que esto sirva de ayuda a alguien más:

Sub Button1_Click2() Dim objXMLSendDoc As Object Set objXMLSendDoc = New MSXML2.DOMDocument objXMLSendDoc.async = False Dim myxml As String myxml = "<?xml version=''1.0''?><Request>Do Something</Request>" If Not objXMLSendDoc.LoadXML(myxml) Then Err.Raise objXMLSendDoc.parseError.ErrorCode, , objXMLSendDoc.parseError.reason End If Dim objRequest As MSXML2.XMLHTTP Set objRequest = New MSXML2.XMLHTTP With objRequest .Open "POST", "http://localhost/SISADraftCalcs/Test2.php", False .setRequestHeader "Content-Type", "application/xml;charset=UTF-16" .setRequestHeader "Cache-Control", "no-cache" .send objXMLSendDoc End With Dim objXMLDoc As MSXML2.DOMDocument Set objXMLDoc = objRequest.responseXML If objXMLDoc.XML = "" Then objXMLDoc.LoadXML objRequest.responseText If objXMLDoc.parseError.ErrorCode <> 0 Then MsgBox objXMLDoc.parseError.reason End If End If Dim rootNode As IXMLDOMElement Set rootNode = objXMLDoc.DocumentElement MsgBox rootNode.SelectNodes("text").Item(0).text End Sub


Por alguna razón, esto funciona:

Dim strPostData As String Dim objRequest As Object strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword Set objRequest = New MSXML2.XMLHTTP With objRequest .Open "POST", "https://api.clickatell.com/http/auth", False .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" .send (strPostData) GetSessionId = .responseText End With

En lugar de construir el strPostData codificado en strPostData través de la concatenación de cadenas, es muy recomendable usar una función de codificación URL:

strPostData = "api_id=" & URLEncode(strApiId) & _ "&user=" & URLEncode(strUserName) & _ "&password=" & URLEncode(strPassword)

Un par de opciones para una función URLEncode() en VBA están en este hilo: ¿Cómo puedo URL codificar una cadena en Excel VBA?