Extraer ZIP de response application/zip;charset=UTF-8

287 views
Skip to first unread message

Leonardo N.

unread,
Aug 30, 2023, 4:19:45 PM8/30/23
to Comunidad de Visual Foxpro en Español
Mis saludos a todos.

Les comento. Al hacer un REQUEST a una WebAPI obtengo el resultado que adjunto en la imagen. Se supone que es un ZIP porque en el Header de respuesta dice: "application/zip;charset=UTF-8" . 

En VFP haciendo uso de MSXML2.XMLHTTP consumo la API y obtengo el resultado. Todo correcto porque me devuelve 200 y puedo ver el contenido incluso.  Se supone que solo debo copiarlo a un archivo con extension ZIP y listo, pero no funciona. Se genera el archivo, pero al tratar de abrirlo sale que no es valido.  Esto es los intentos que hice y nada.

Intento #1.
lcContDecode = loXmlHttp.responseText
lcFileZIP = "C:\Tmp\Propuesta.ZIP"
StrToFile(lcContDecode,lcFileZIP)

Intento #2...Haciendo pruebas con STRCONV()
lcContDecode = STRCONV(loXmlHttp.responseText,14)  && STRCONV(loXmlHttp.responseText,10) ...STRCONV(loXmlHttp.responseText,12) 
lcFileZIP = "C:\Tmp\Propuesta.ZIP"
StrToFile(lcContDecode,lcFileZIP)

Intento #3...
lcContDecode = loXmlHttp.responseText
lcFileZIP = "C:\Tmp\Propuesta.ZIP"
StrToFile(lcContDecode,lcFileZIP , 4)

En cualquier de esos intentos el ZIP generado no se puede abrir, sale mensaje, "ZIP no valido ó El archivo esta dañado. "

Ahora, en el POSTMAN, al guardar el response y bajarlo a disco, si me descarga con un ZIP y si lo puedo abrir sin problemas.

Alguna idea como obtener ese ZIP del  "loXmlHttp.responseText" en VFP?.

Gracias
Response.png

jcagu...@gmail.com

unread,
Aug 30, 2023, 4:31:36 PM8/30/23
to Comunidad de Visual Foxpro en Español
es de SUNAT Perú?

António Tavares Lopes

unread,
Aug 30, 2023, 5:28:33 PM8/30/23
to Comunidad de Visual Foxpro en Español
Leonardo,

Intente usar responseBody en lugar de responseText.

James Suárez

unread,
Aug 30, 2023, 5:30:35 PM8/30/23
to publice...@googlegroups.com
1. Hay un problema en el servidor, debería ser application/zip (sin el charset=utf8)
2. Luego asumo que XMLHTTP . responseText pues justo te está devolviendo el texto, procesado como que fuera UTF8, cuando en realidad un zip no es utf8. 
NO TENGO COMO PROBAR AHORITA, pero supongo que en vez de responseText, podría usar responseBody o responseStream (que me parece que son propiedades disponibles también ) para obtener los bytes originales sin codificar previamente como utf8.



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/0af29c64-4ef0-4e3e-9795-20348451dbd4n%40googlegroups.com.

Leonardo N.

unread,
Aug 30, 2023, 8:26:52 PM8/30/23
to Comunidad de Visual Foxpro en Español
Efectivamente, usar  "responseBody" resuelve el problema.

Gracias a todos.


Armando Castro

unread,
Mar 11, 2024, 12:53:57 AM3/11/24
to Comunidad de Visual Foxpro en Español
LOCAL lcCodEmpresa
lcCodEmpresa = '01'

URLRest = "http://xx.xx.xxx.xx/sire/descargar_vtas.php?" + ;
          "cod_empresa=" + lcCodEmpresa

? URLRest

oREST = CREATEOBJECT("Msxml2.ServerXMLHTTP.6.0")
oREST.OPEN("GET",URLRest, .F.)
oREST.setRequestHeader("User-Agent","Apache-HttpClient/4.55 (Java/16.0.1)")
oREST.setRequestHeader("Content-Type","text/xml;charset=utf-8")
*IF oRest.status = 1 && No encontrado
oREST.SEND()
oResultado = oREST.ResponseBody 
? oResultado
RELEASE oREST



STRTOFILE( oResultado, 'archivo.zip')
Reply all
Reply to author
Forward
0 new messages