XmlHttp.send VAR no funciona, aunque la VAR sea de tipo string

recox

Argentum Online Libre
Bueno el tema es asi, cree un modulo que es el encargado de hacer toda la comunicacion con la API hecha en Node.js para diferentes tipos de cosas
https://github.com/ao-libre/ (mas info)

Funciona barbaro y no tiene problemas, pero el tema es que tengo una duda y me gustaria poder resolverla y en stackoverflow no tuve suerte:

Tengo el siguiente snippet:
Código:
Public Sub ApiEndpointSendResetPasswordAccountEmail(ByVal Email As String, ByVal NewPassword As String)
    'Este endpoint envia un email para cambiar password al usuario

    UrlServer = GetVar(IniPath & "Server.ini", "CONEXIONAPI", "UrlServer") & "/api/v1/emails/resetAccountPassword"

    Dim Parameters As String
    Parameters = "newPassword=" & NewPassword & "&emailTo=" & Email

    Call SendPOSTRequest(UrlServer, Parameters)
End Sub


Private Sub SendPOSTRequest(ByVal Endpoint As String, ByVal Parameters As String)
On Error GoTo ErrorHandler

    Set XmlHttp = CreateObject("Microsoft.XmlHttp")

    XmlHttp.Open "POST", Endpoint, False
    XmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

    'Por alguna razon tengo que castearlo a string, sino no funciona, la verdad no tengo idea por que ya que la variable es String
    XmlHttp.send CStr(Parameters)

ErrorHandler:
    If Err.Number <> 0 Then
        Call LogError("Error POST endpoint: " & Endpoint & ". La Api parece estar offline. " & Err.Number & " - " & Err.description)
    End If
End Sub

Basicamente asi funciona barbaro, pero mi duda que no me deja dormir por las noches (??) es en la funcion SendPOSTRequest en la linea XmlHttp.send CStr(Parameters) si no casteo a String la variable Parameters, no funciona XmlHttp va a arrojar un error diciendo que los parametros son incorrectos, ahora casteandolo a string funciona, el tema es que Parameters de movida ya es un String como se puede ver en la firma del metodo.

Si bien funciona y bien, me gustaria saber el por que pasa esto si alguien tiene alguna idea
 

Midraks

Creador de AOWeb
Ex-Staff
No estoy seguro si entendi muy bien, pero siempre el body del POST tiene que ser un String, en el caso que vos quieras mandarle un JSON haces un cast de ese JSON a String y listo.
 

recox

Argentum Online Libre
El tema es el siguiente

Código:
Private Sub SendPOSTRequest(Endpoint As String, ByVal Parameters As String)

On Error GoTo ErrorHandler

    Set XmlHttp = CreateObject("Microsoft.XmlHttp")
    
    XmlHttp.Open "POST", Endpoint, False
    XmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        
    'Por alguna razon tengo que castearlo a string, sino no funciona, la verdad no tengo idea por que ya que la variable es String
    'XmlHttp.send CStr(Parameters)
    XmlHttp.send Parameters

ErrorHandler:

    If Err.Number <> 0 Then
        Call LogError("Error POST endpoint: " & Endpoint & ". La Api parece estar offline. " & Err.Number & " - " & Err.description)
    End If
    
End Sub

Como veras esa funcion recibe 2 parametros de tipo String (Endpoint y Parameters)

Utilizo el parametro Parameters en la linea XmlHttp.send Parameters, te dejo una captura de pantalla con el valor que le estoy poniendo (en este caso un simple string como "emailTo=[email protected]"




ahora es donde empieza lo loco

Ya creo que quedo bien claro que el parametro Parameters es un String.
al usarlo en esta linea de codigo asi:

XmlHttp.send Parameters

entra al errorHandler con el error description: "The parameter is incorrect.", un error normal en xmlHttp cuando esta mal formados los parametros

Lo curioso es que si en esa misma linea casteo el parametro Parameters a String (el cual ya es un String), esto funciona sin ningun problema, es decir
XmlHttp.send CStr(Parameters)

Como veran no hay ningun problema que resolver ya que el programa funciona bien, lo que me gustaria saber es por que pasa esto nada mas.


----

@CUICUI hice lo que hablamos en el chat (lo que nombra el muchacho de no usar ni ByVal ni ByRef pero nada... ), igual al margen calculo que VB6 de alguna forma tiene que pasar los parametros o por referencia o por valor, que yo sepa no existe otra forma de pasar parametros
 

Midraks

Creador de AOWeb
Ex-Staff
Ahhh ahí entendí, ni idea la verdad, falopas de VB6 supongo jajaja.

Si directamente en el send escribís el string tipo: "emailTo=[email protected]" te funciona? Si es así es algo de la variable aunque el debug te diga que es un string.
 

recox

Argentum Online Libre
Ahhh ahí entendí, ni idea la verdad, falopas de VB6 supongo jajaja.

Si directamente en el send escribís el string tipo: "emailTo=[email protected]" te funciona? Si es así es algo de la variable aunque el debug te diga que es un string.
Afirmativo, si escribo "emailTo=[email protected]" funciona, seguro es una falopa rara pero bueno jaja quiero entenderle el mambo XD, aunque es mejor a veces no saber ciertas cosas ?? XD
 
Arriba