Page 1 of 1

Capturar error clase curl

Posted: Thu Sep 26, 2024 7:37 pm
by leandro
Hola buenas tardes para todos, estamos haciendo _ en la app para implementar el uso de la lib curl, pero no encontramos como capturar el error en caso que se genere, me explico:

Anteriormente los hacíamos así:

Code: Select all | Expand

            ohttp := CreateObject( "MSXML2.XMLHTTP" )
            ohttp:Open( "POST" , ::urlenvio ,.F.)
            oHttp:SetRequestHeader("cache-control", "no-cache")
            ohttp:SetRequestHeader("content-type", "application/json" )
            ohttp:SetRequestHeader("authorization", "Basic "+cBas64 )
            TRY
                ohttp:Send( ::cdnaJson )
                response :=  ohttp:responseText
            CATCH oError
                cError := "Error: " + cValToChar( oError:GenCode) + ;
                        " SubC: " + cValToChar( oError:GenCode) + " OSCode: " + cValToChar( oError:GenCode) + CRLF + ;
                        "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Envio de CURL: " + oError:Description 
                exito := {.f.,cError}

                return exito
            END
 
En la variable cError capturábamos el error y en la variable response la respuesta de la petición

Ahora que estamos usando curl, _ el error, pero no sabemos como, aquí el código:

Code: Select all | Expand

            AADD(aHeader,"Authorization: Basic "+cBas64 )
            AADD(aHeader,"Content-Type: application/json")
            AADD(aHeader,"cache-control: no-cache")         

            oCurl = curl_easy_init()
            curl_easy_setopt( oCurl, HB_CURLOPT_URL, ::urlenvio )
            curl_easy_setopt( oCurl, HB_CURLOPT_DL_BUFF_SETUP )
            curl_easy_setopt( oCurl, HB_CURLOPT_SSL_VERIFYPEER, 0 )
            curl_easy_setopt( oCurl, HB_CURLOPT_POSTFIELDS, ::cdnaJson )
            curl_easy_setopt( oCurl, HB_CURLOPT_CUSTOMREQUEST , "POST")
            curl_easy_setopt( oCurl, HB_CURLOPT_HTTPHEADER, aHeader )   

            IF CURL_EASY_PERFORM( oCurl ) == 0
                response = curl_easy_dl_buff_get( oCurl )
            ENDIF

            curl_easy_cleanup( oCurl )
 
en la variable response logramos recuperar la respuesta de manera correcta, pero como capturamos el error en caso de hubiese? donde debemos colocar el try catch?

De antemano gracias si alguien nos puede ayudar.

Re: Capturar error clase curl

Posted: Fri Sep 27, 2024 2:36 pm
by karinha

Re: Capturar error clase curl

Posted: Sat Sep 28, 2024 11:14 pm
by cnavarro
Leandro, prueba

Code: Select all | Expand

      cError  := curl_easy_perform( oCurl )
      if !Empty( cError )
         //MsgInfo( curl_easy_strerror( cError ), "Error" )
         cRet := curl_easy_strerror( cError )
      else
         cRet := curl_easy_dl_buff_get( oCurl )
      endif
 

Re: Capturar error clase curl

Posted: Tue Oct 01, 2024 10:07 pm
by leandro
Gracias amigo, parece que ese es el camino :D

Cualquier cosa vuelvo y molesto por aquí jejejejeje