Page 1 of 2

Re: Capturar el motivo del error petición web (curl)

Posted: Wed Nov 02, 2022 2:06 am
by leandro
Buenas noches para todos
Error: 1001 SubC: 1001
OSCode: 1001
SubSystem: MSXML2.XMLHTTP
Envio de CURL: DISP_E_MEMBERNOTFOUND
hemos logrado detectar que el error mencionado con anterioridad, solo sale cuando direccionamos al servidor nuevo, en el anterior funciona de manera correcta. De casualidad alguien sabe a que se pueda deber? es necesario instalar algún complemento en el nuevo servidor, algo de seguridad?

Cabe recordar que solo sucede en algunos computadores, sobre todo en los que tienen windows7.

y que la prueba se hizo en el mismo computador y lo único que cambiamos fue la dirección web.

Cuando lo direccionamos al servidor https://hymplus.com/servicios/autorizados funciona correctamente

pero al direccionarlo al servidor https://hymlyma.com/servicios/autorizados es en donde sale el error

Re: Capturar el motivo del error petición web (curl)

Posted: Sat Nov 05, 2022 9:06 pm
by leandro
Buenas tardes para todos

Bueno les cuento que buscando solucionar este problema que tenemos, logramos compilar la aplicación con harbour, como nos recomendó Cristobal, estamos intentando usar la libreria curl, el problema ahora es que no logramos que el servidor nos entregue una respuesta. Necesitamos ayuda para traducir el código que veníamos usando por el de la libreria curl.

Código anterior

Code: Select all | Expand

            cBas64 := hb_base64encode(::user+":"+::pass,len(::user+":"+::pass))
            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 
 
Código con curl, que encontramos en el foro

Code: Select all | Expand

            cBas64 := hb_base64encode(::user+":"+::pass,len(::user+":"+::pass))
            curl_global_init()
            hCurl := curl_easy_init()
            if !empty( hCurl )

                curl_easy_setopt( hCurl, HB_CURLOPT_URL, ::urlenvio )
                AAdd( aHeaders, "authorization: Basic "+cBas64 ) 
                AAdd( aHeaders, "content-type : application/json" )   
                AAdd( aHeaders, "cache-control : no-cache" )   
                curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
                curl_easy_setopt( hCurl, HB_CURLOPT_CONNECTTIMEOUT , 100 )
                curl_easy_setopt( hCurl, HB_CURLOPT_POST, 1)
                curl_easy_setopt( hCurl, HB_CURLOPT_CUSTOMREQUEST, "POST")
                curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, ::cdnaJson )
                curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
                curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
                curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )

                cError := curl_easy_perform( hCurl )
                if !Empty( cError )
                    MsgInfo( curl_easy_strerror( cError ), "Error" )
                endif
                cTexto  := curl_easy_dl_buff_get( hCurl )
                fw_memoedit( cTexto ) //Creo que aqui viene la respuesta 
                curl_easy_reset( hCurl )
            endif
            curl_global_cleanup()   
 
Este es el error que se captura en el fw_memoedit()

Code: Select all | Expand

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
 
Luego de esto la aplicación se cierra sin que muestre ningún error y tampoco genera el error en el archivo error.log

De antemano gracias por la ayuda

Re: Capturar el motivo del error petición web (curl)

Posted: Sat Nov 05, 2022 10:18 pm
by cnavarro
Mira a ver si algo de esto te ayuda

Code: Select all | Expand

      curl_easy_setopt( oCurl, HB_CURLOPT_SSL_VERIFYPEER, 0 )
      curl_easy_setopt( oCurl, HB_CURLOPT_ENCODING, "UTF-8" )

      Do Case
          Case cType == "POST"
                 curl_easy_setopt( oCurl, HB_CURLOPT_DL_BUFF_SETUP )
                 curl_easy_setopt( oCurl, HB_CURLOPT_POST, 1 )
         //   //curl_easy_setopt( oCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
                if !Empty( cParams )
                    curl_easy_setopt( oCurl, HB_CURLOPT_POSTFIELDS, cParams )
               endif
     EndCase

 

Re: Capturar el motivo del error petición web (curl)

Posted: Sat Nov 05, 2022 11:43 pm
by leandro
No nada, sigue igual :(

Code: Select all | Expand

            curl_global_init()
            hCurl := curl_easy_init()
            if !empty( hCurl )

                curl_easy_setopt( hCurl, HB_CURLOPT_URL, ::urlenvio )
                AAdd( aHeaders, "authorization: Basic "+cBas64 ) 
                AAdd( aHeaders, "content-type : application/json" )   
                AAdd( aHeaders, "cache-control : no-cache" )   
                curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
                curl_easy_setopt( hCurl, HB_CURLOPT_CONNECTTIMEOUT , 100 )
                curl_easy_setopt( hCurl, HB_CURLOPT_POST, 1)
                //curl_easy_setopt( hCurl, HB_CURLOPT_CUSTOMREQUEST, "POST")
                curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, ::cdnaJson )
                curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
                curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
                curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
                curl_easy_setopt( hCurl, HB_CURLOPT_ENCODING, "UTF-8" )

                cError := curl_easy_perform( hCurl )
                if !Empty( cError )
                    MsgInfo( curl_easy_strerror( cError ), "Error" )
                endif
                cTexto  := curl_easy_dl_buff_get( hCurl )
                fw_memoedit( cTexto ) //Creo que aqui viene la respuesta 
                curl_easy_reset( hCurl )
            endif
            curl_global_cleanup()
 

Re: Capturar el motivo del error petición web (curl)

Posted: Sun Nov 06, 2022 2:46 am
by cnavarro
Añade al principio

Code: Select all | Expand

      curl_easy_setopt( oCurl, HB_CURLOPT_DEFAULT_PROTOCOL, "https" )
 

Re: Capturar el motivo del error petición web (curl)

Posted: Sun Nov 06, 2022 11:52 am
by leandro
Amigo gracias por la ayuda

Ahora sale este error:

Code: Select all | Expand

Application
===========
   Path and name: C:\DLYMA\hymlyma.exe (32 bits)
   Size: 8,435,200 bytes
   Compiler version: Harbour 3.2.0dev (r2008190002)
   FiveWin  version: FWH 21.06
   C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
   Windows version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 35 secs 
   Error occurred at: 06/11/2022, 06:51:16
   Error description: Error BASE/1003  No existe la variable: HB_CURLOPT_DEFAULT_PROTOCOL
 

Re: Capturar el motivo del error petición web (curl)

Posted: Sun Nov 06, 2022 1:37 pm
by cnavarro
#define HB_CURLOPT_DEFAULT_PROTOCOL 0x072d00

Re: Capturar el motivo del error petición web (curl)

Posted: Sun Nov 06, 2022 1:59 pm
by leandro
Amigo gracias por responder pero nada :(
Ahora esta devolviendo el error

Code: Select all | Expand

SSL connect error
 

Code: Select all | Expand

            curl_global_init()
            oCurl := curl_easy_init()
            if !empty( oCurl )
                curl_easy_setopt( oCurl, HB_CURLOPT_DEFAULT_PROTOCOL, "https" )
                curl_easy_setopt( oCurl, HB_CURLOPT_URL, ::urlenvio )
                AAdd( aHeaders, "authorization: Basic "+cBas64 ) 
                AAdd( aHeaders, "content-type : application/json" )   
                AAdd( aHeaders, "cache-control : no-cache" )   
                curl_easy_setopt( oCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
                curl_easy_setopt( oCurl, HB_CURLOPT_CONNECTTIMEOUT , 100 )
                curl_easy_setopt( oCurl, HB_CURLOPT_POST, 1)
                //curl_easy_setopt( oCurl, HB_CURLOPT_CUSTOMREQUEST, "POST")
                curl_easy_setopt( oCurl, HB_CURLOPT_POSTFIELDS, ::cdnaJson )
                curl_easy_setopt( oCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
                curl_easy_setopt( oCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
                curl_easy_setopt( oCurl, HB_CURLOPT_DL_BUFF_SETUP )
                curl_easy_setopt( oCurl, HB_CURLOPT_ENCODING, "UTF-8" )

                cError := curl_easy_perform( oCurl )
                if !Empty( cError )
                    MsgInfo( curl_easy_strerror( cError ), "Error" )
                endif
                cTexto  := curl_easy_dl_buff_get( oCurl )
                fw_memoedit( cTexto ) //Creo que aqui viene la respuesta 
                curl_easy_reset( oCurl )
            endif
            curl_global_cleanup()
 

Re: Capturar el motivo del error petición web (curl)

Posted: Mon Nov 07, 2022 2:30 pm
by cnavarro
Leandro, contacta conmigo por mail o skype