Buenas tardes/Noches/días
Bueno ya poco a poco fui solucionado los problemillas, ahora de momento solo me queda este :) :) , a ver si a alguien le suena.
-------------------------------------------------------------------------------------------------------------------------------
LOCAL cJson, oHttp, oBody, cResp, nStatus
nStatus = 0
#DEFINE adTypeBinary 1
#DEFINE adTypeText
2
#DEFINE adReadAll -1
*---------------------------------------------------------------------------------------------------*
* 1) Leer el fichero (bytes tal cual) y quitar el BOM si lo tiene
*
*---------------------------------------------------------------------------------------------------*
IF !FILE(cFileJson)
MESSAGEBOX("No se encuentra el fichero:" + xCRLF + cFileJson, 16, "Error")
RETURN .F.
ENDIF
cJson = FILETOSTR(cFileJson)
IF LEFT(cJson, 3) == CHR(239) + CHR(187) + CHR(191) && BOM UTF-8 (EF BB BF)
cJson = SUBSTR(cJson, 4)
ENDIF
IF EMPTY(cJson)
MESSAGEBOX("El fichero esta vacio.", 16, "Error")
RETURN .F.
ENDIF
*----------------------------------------------------------------------------------------------------*
* 2) Pasar los bytes a un stream binario
-*
* (NO enviar la cadena directamente: MSXML la recodificaria *
* a UTF-8 otra vez y romperia las tildes)
-*
*----------------------------------------------------------------------------------------------------*
oBody = CREATEOBJECT("ADODB.Stream")
oBody.Type = adTypeText
oBody.Charset = "iso-8859-1" && mapea 1:1 los 256 bytes, sin BOM
oBody.Open()
oBody.WriteText(cJson)
oBody.Position = 0
oBody.Type = adTypeBinary && solo se puede cambiar en Position = 0
WAIT 'Llega hasta el control 2º' WINDOW AT 15,15 TIMEOUT 30
*--------------------------------------------------------------*
* 3) Enviar
*
*--------------------------------------------------------------*
TRY
oHttp = CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")
oHttp.SetTimeouts(30000, 30000, 30000, 60000)
oHttp.Open("POST", cUrl, .F.)
oHttp.SetRequestHeader("X-API-KEY", cApiKey)
oHttp.SetRequestHeader("Content-Type", "application/json")
oBody.Position = 0
oHttp.Send(oBody.Read(adReadAll)) && array de bytes, sin recodificar
nStatus = oHttp.Status
cResp = STRCONV(oHttp.ResponseText, 11) && 11 = UTF-8 -> ANSI
Wait "HTTP - Status " + TRANSFORM(nStatus) + " " + oHttp.StatusText WINDOW AT 15,15 TIMEOUT 30
***
Hasta aqui llega bien, despues me aparece el mensaje "Cadena demasiado larga", y no se a que se refiere. *****
STRTOFILE(cResp, "respuesta.json")
WAIT 'Llega hasta el control 4º' WINDOW AT 15,15 TIMEOUT 30
CATCH TO oErr
WAIT "Error: " + oErr.Message WINDOW AT 15,15 TIMEOUT 30
FINALLY
IF VARTYPE(oBody) = "O"
oBody.Close()
ENDIF
oBody = NULL
oHttp = NULL
ENDTRY
RETURN nStatus