vespina / json

100% VFP JSON parser & utilities
GNU General Public License v3.0
18 stars 6 forks source link

respuesta get no se puede recorrer #12

Closed benrojas01 closed 1 year ago

benrojas01 commented 1 year ago

Estimado Victor

trato de hacer una consulta get de la siguiente manera, en postman me funciona correctamente pero cuando lo intento con tu json.prg pasa lo siguiente

DO JSON

JSON.useFastParser = .T.

lcorreoApi = "ryc.consultor@gmail.com" lclaveApi = "nlb0xrdzhfkacnm0c61xno47sd53scgxoptpikbsyg" stclaveApi = STRCONV(lclaveApi,13)

DEFINE CRLF CHR(13)+CHR(10)

LOCAL oResp,cData,cHeaders

TEXT TO cHeaders NOSHOW TEXTMERGE Accept-Encoding: gzip Connection: keep-alive Content-Type: text/plain; charset=utf-8 x-api-key: nlb0xrdzhfkacnm0c61xno47sd53scgxoptpikbsyg ENDTEXT

oResp = JSON.httpGet("https://api.algodocs.com/v1/extractors/?email_address=cnljLmNvbnN1bHRvckBnbWFpbC5jb20=&api_key=bmxiMHhyZHpoZmthY25tMGM2MXhubzQ3c2Q1M3NjZ3hvcHRwaWtic3ln", cHeaders)

IF oResp.HasError
   ?oResp.errorMsg
   *RETURN
ENDIF

cprueba = JSON.Stringify(oResp) ?cprueba

cjson = json.parse(cprueba) IF JSON.lastError.hasError ?JSON.lastError.films RETURN ENDIF

la respuesta me la trae pero no la puedo leer los elementos porque me la muestra así

image

en postman me la trae sin problemas

image

agradezco mucho si me puedes ayudar

saludos,

vespina commented 1 year ago

Hola. Acá tenemos dos temas:

a) En los headers del request estas incluyendo la linea Accept-Encoding: gzip, lo que causa que la respuesta devuelta por el webservice venga comprimida con GZIP... esa es la razón de los caracteres ratos que estas recibiendo. En Potsman obtienes el resultado esperado porque ese programa esta preparado para descomprimir automáticamente las respuestas que llegan comprimidas con GZIP. Si eliminas ese header obtendrás la respuesta correcta.

b) Los métodos http en JSON devuelven la respuesta original recibida en la propiedad RAW. Si esa respuesta viene codificada como JSON, entonces los métodos aplican un parse automático a RAW y devuelven el objeto obtenido en la propiedad JSON. En tu caso, si consultas el valor de la propiedad ContentType en la respuesta veras que llega como text/plain, y esa es la razón por la que el método httpGet no esta llenando la propiedad JSON.

Saludos

Victor Espina