Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] HttpRequest en RM Fito RM/COBOL 7 23 de marzo de 2022 23:08

Respuesta

  #1
Antiguo 1 de noviembre de 2021, 14:04
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243
Tableta HttpRequest
0 Inactivo Inactivo

Hola Amigos:

Estoy haciendo una aplicación para conectar mi sistema a un servicio web (Conquer) para vendedores (notas de pedido, cobranzas, etc).

Estoy usando HttpRequest. logro hacer la conexión, pedir el token, pero después tengo que enviar un archivo json con la tabla de artículos.

Les voy pasando código:

Código COBOL:
  1.  01  variables-conexion global.
  2.  
  3.      02 winhttp          pic x(128) value "WinHttp.WinHttpRequest.5.1".
  4.  
  5.      02 oWS usage object reference COM.
  6.      02 SRC              pic x(1024).
  7.      02 MSG              pic x(1024).
  8.  
  9.      02 metodo           pic x(1024) value "POST".
  10.      
  11.      02 autenticacion    pic x(1024) value "http://157.230.55.48:5000/api/v1/auth/login".
  12.      
  13.      02 arti-alta        pic x(1024) value "http://157.230.55.48:5000/api/v1/erp/articles/sync".
  14.      
  15.      02 clave            pic x(30)  value "XXXXXXXXX".
  16.  
  17.      02 credenciales.
  18.         03               pic x(7) value "Bearer ".
  19.         03 token         pic x(1024).
  20.          
  21.      02 RH1              pic x(1024).
  22.      02 RH2              pic x(1024).
  23.      
  24.      02 url              pic x(1024) value "http://157.230.55.48:5000/api/v1/erp/".
  25.      
  26.      02 modo             pic x(1024) value "FALSE".
  27.  
  28.      02 respuesta        pic x(8192).
  29.      
  30.      02 envio-r.
  31.         03                      pic x(19) value "d:\sernick\prueba1".
  32.         03 archivo-json.
  33.            04                   pic x(5) value "temp".
  34.            04 arch-json-time    pic 9(8).
  35.            04                   pic x(5) value ".json".
  36.      02 redefines envio-r.
  37.         03 envio                pic x(37).
Estas son las variables que uso. El campo clave es la clave para pedir el token (no a pongo acá porque le pertenece al cliente)

Código COBOL:
  1.  PROCEDURE       DIVISION.
  2.  
  3.  #include "copys\declara-com.cpy".
  4.  
  5.  comienzo.
  6.      invoke COM "CREATE-OBJECT" using winhttp returning oWS.
  7.  
  8.      invoke oWS "OPEN" using metodo autenticacion modo.
  9.  
  10.      move "Authorization"         to RH1.
  11.      move clave                   to RH2.
  12.      invoke oWS "setRequestHeader" using RH1 RH2.
  13.  
  14.      invoke oWS "send".
  15.      
  16.      invoke oWS "get-Responsetext" returning respuesta.
  17.  
  18.      set oWS           to null.
  19.  
  20.      invoke json "Clear".
  21.      
  22.      invoke json "Load" USING respuesta.
  23.      
  24.      invoke json "StringOf" using "token" returning token.
  25.      
  26.      invoke grdLista "AddItem" using respuesta.
  27.  
  28.      exit program.
Con esto pido el token...

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  wsend.
  3.      02       pic x(115) value '{"000001":{"k":"1","rk":"1","b":"0","d":"CREMOSO LA LACTEO","i":"","n":"CREMOSO LA LACTEO","ld":"CREMOSO LA LACTEO"'.
  4.      02       pic x(115) value ',"nc":"0","fa":"0","dum":"UN","v":{"a":"21","f":false},"um":{"UN":{"e":"1","k":"UN","n":"UNIDAD"}}}}'.
  5.  
  6.  PROCEDURE       DIVISION.
  7.  
  8.  #include "copys\declara-com.cpy".
  9.  
  10.  comienzo.
  11.      invoke COM "CREATE-OBJECT" using winhttp returning oWS.
  12.  
  13.      invoke oWS "OPEN" using metodo arti-alta modo.
  14.  
  15.      move "Authorization"         to RH1.
  16.      move credenciales            to RH2.
  17.      invoke oWS "setRequestHeader" using RH1 RH2.
  18.  
  19.      invoke grdLista "AddItem" using credenciales.
  20.  
  21.      move "Content-Type"          to RH1.
  22.      move "application/json"      to RH2.
  23.      invoke oWS "setRequestHeader" using RH1 RH2.
  24.  
  25.      invoke oWS "send" using wsend.
  26.      
  27.      invoke oWS "get-Responsetext" returning respuesta.
  28.  
  29.      set oWS           to null.
  30.  
  31.      invoke grdLista "AddItem" using respuesta.
  32.  
  33.      exit program.
Acá trato de enviar el json de artículos. En esta prueba que les muestro el json lo cargo en una variable, pero la idea es poder enviar el archivo.

Si lo hago con Postman no tengo problemas, pero no sé traducir al cobol eso

Ahí les paso la imagen de pantalla del Postman.
En el body, selecciono binary y me pide el archivo. Ahora cómo hacerlo en Cobol no pude...

Saludos

Fito...

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  postman.jpg
Vistas: 143
Tamaño:  142,4 KB  
Fito is offline   Responder Con Cita
  #2
Antiguo 1 de noviembre de 2021, 18:21
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Fito, mira esto a ver: Post File HTTP using visual foxpro

Código VB:
  1. filecontent = FileToStr("Movies.txt")
  2. loHTTP = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")    
  3. loHTTP.Open("POST", "http://myip:8080/upload/", .F.)
  4. loHTTP.SetRequestHeader("content-type", "text/plain") && or other mime types for other file types.
  5. loHTTP.SetRequestHeader("content-disposition", 'attachment; filename="Movies.txt"')
  6. loHTTP.Send(filecontent)



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #3
Antiguo 1 de noviembre de 2021, 22:29
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola Kuk:

Por lo que veo, en el método SEND va el contenido del archivo no el nombre.

Lo que me parece raro es que si es así que va el contenido, para qué le decimos el nombre del archivo en el Header.

Voy a probar así y comento.

Muchas Gracias.

Saludos.

Fito...

---------- Post añadido el 1 de noviembre de 2021 a las 21:36 ----------

Kuk, sos un genio...

Así funcionó

Código COBOL:
  1.  comienzo.
  2.      invoke COM "CREATE-OBJECT" using winhttp returning oWS.
  3.  
  4.      invoke oWS "OPEN" using metodo arti-alta modo.
  5.  
  6.      move "Authorization"         to RH1.
  7.      move credenciales            to RH2.
  8.      invoke oWS "setRequestHeader" using RH1 RH2.
  9.  
  10.      invoke grdLista "AddItem" using credenciales.
  11.  
  12.      move "Content-Type"          to RH1.
  13.      move "application/json"      to RH2.
  14.      invoke oWS "setRequestHeader" using RH1 RH2.
  15.  
  16.      move "Content-Disposition"   to RH1.
  17.      move spaces                  to RH2.
  18.      string 'attachment; filename="' delimited by size
  19.             envio                    delimited by size
  20.             '"'                      delimited by size
  21.         into RH2
  22.      end-string.
  23.      invoke oWS "setRequestHeader" using RH1 RH2.
  24.  
  25.      invoke oWS "send" using wjson.
  26.      
  27.      invoke oWS "get-Responsetext" returning respuesta.
  28.  
  29.      set oWS           to null.
  30.  
  31.      invoke grdLista "AddItem" using respuesta.
  32.  
  33.      exit program.

En el campo envío tengo el nombre del archivo json y en el campo wjson tengo metido el contenido del json.

El json lo genero con chilkat (tengo un post paralelo donde Fastpho me ha dado todas las soluciones). El activex de chilkat tiene un método para cargar en un string todo el contenido del json, pero me encuentro con el límite de 8192 caracteres, así que por ahora lo que hago es leer el archivo line sequential e ir cargando el string.

Lo que sigo sin entender por qué en la cabecera le digo que adjunto el archivo json y después en el body en vez de hacer referencia al archivo, tengo que meter el contenido.

Brillante amigo.

Saludos

Fito...
Fito is offline   Responder Con Cita
  #4
Antiguo 2 de noviembre de 2021, 09:54
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Citación del post de Fito Ver Mensaje
Lo que sigo sin entender por qué en la cabecera le digo que adjunto el archivo json y después en el body en vez de hacer referencia al archivo, tengo que meter el contenido.
Hola compañero. La verdad es que yo tampoco, este campo no es mi punto fuerte.
Lo importante es que funciona



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #5
Antiguo 2 de noviembre de 2021, 15:52
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Citación del post de Fito Ver Mensaje
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  wsend.
  3.      02       pic x(115) value '{"000001":{"k":"1","rk":"1","b":"0","d":"CREMOSO LA LACTEO","i":"","n":"CREMOSO LA LACTEO","ld":"CREMOSO LA LACTEO"'.
  4.      02       pic x(115) value ',"nc":"0","fa":"0","dum":"UN","v":{"a":"21","f":false},"um":{"UN":{"e":"1","k":"UN","n":"UNIDAD"}}}}'.
  5.  
  6.  PROCEDURE       DIVISION.
  7.  
  8.  #include "copys\declara-com.cpy".
  9.  
  10.  comienzo.
  11.      invoke COM "CREATE-OBJECT" using winhttp returning oWS.
  12.  
  13.      invoke oWS "OPEN" using metodo arti-alta modo.
  14.  
  15.      move "Authorization"         to RH1.
  16.      move credenciales            to RH2.
  17.      invoke oWS "setRequestHeader" using RH1 RH2.
  18.  
  19.      invoke grdLista "AddItem" using credenciales.
  20.  
  21.      move "Content-Type"          to RH1.
  22.      move "application/json"      to RH2.
  23.      invoke oWS "setRequestHeader" using RH1 RH2.
  24.  
  25.      invoke oWS "send" using wsend.
  26.      
  27.      invoke oWS "get-Responsetext" returning respuesta.
  28.  
  29.      set oWS           to null.
  30.  
  31.      invoke grdLista "AddItem" using respuesta.
  32.  
  33.      exit program.
Acá trato de enviar el json de artículos. En esta prueba que les muestro el json lo cargo en una variable, pero la idea es poder enviar el archivo.

Si lo hago con Postman no tengo problemas, pero no sé traducir al cobol eso

Ahí les paso la imagen de pantalla del Postman.
En el body, selecciono binary y me pide el archivo. Ahora cómo hacerlo en Cobol no pude...

Saludos

Fito...
Podrias probar algo como esto directamente codigo no probado

Código VB:
  1. string
  2.                            '   Sub FuncionEnviarArticulo()                                      ' vbCRLF
  3.                           '        Dim RespEstado  , respuesta , success                       ' vbCRLF  
  4.                           '        Dim wsend , metodo arti-alta modo                           ' vbCRLF  
  5.                            '        Dim RH1 , RH2                                               ' vbCRLF                           
  6.  
  7.                            '        set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") ' vbCRLF
  8.  
  9.                            '                                                                    ' vbCRLF
  10.  
  11.                            '     WinHttpReq.Open "POST", "metodo & arti-alta ",modo)             ' vbCRLF
  12.                           '                                                                    ' vbCRLF                          
  13.                           '        RH1 =   "Authorization"                                     ' vbCRLF                          
  14.                            '        RH2 =   "credenciales"                                      ' vbCRLF                          
  15.                            
  16.                            '     WinHttpReq.setRequestHeader ( RH1 , RH2 )                      ' vbCRLF                           
  17.  
  18.                            '        RH1 =   "Content-Type"                                      ' vbCRLF                          
  19.                            '        RH2 =   "application/json"                                  ' vbCRLF                          
  20.                            
  21.                            '     WinHttpReq.setRequestHeader ( RH1 , RH2 )                      ' vbCRLF                           
  22.                          
  23.                            '         set json = CreateObject("Chilkat_9_5_0.JsonObject")        ' vbCRLF
  24.                           '         success = json.LoadFile("plu.txt")                         ' vbCRLF * archivo con formato json ya creado  
  25.                           '         wsend = json.emit                                          ' vbCRLF *> variable con el registro json  
  26. *                          '         msgbox success                                             ' vbCRLF *> 1 correcto 0 error
  27.  
  28.  
  29.                            '     WinHttpReq.Send(wsend)                                         ' vbCRLF  *> envia los bloques      
  30.  
  31.                            '     WinHttpReq.WaitForResponse()                                   ' vbCRLF
  32.  
  33.                            '     respuesta = WinHttpReq.ResponseText                             ' vbCRLF
  34.  
  35.                            '          msgbox respuesta                                           ' vbCRLF
  36.                          
  37.                            '         RespEstado =  WinHttpReq.Status                            ' vbCRLF
  38.                          
  39.                            '         Estado   =  RespEstado                                     ' vbCRLF *> estado transferencia de bloques
  40.                          
  41.                            
  42.  
  43.                            
  44.                            '   End Sub                                                          ' vbCRLF                  
  45.                     delimited by size into scriptCode1
  46.                      end string
  47.       INVOKE scriptControl1 "Reset".
  48.      
  49.       invoke scriptControl1 "AddCode" using scriptCode.
  50.  
  51.       invoke scriptControl1 "ExecuteStatement" using "FuncionEnviarArticulo".
fastpho is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:48.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.