Page 1 of 1

Petición POST webview

PostPosted: Sun Aug 13, 2023 10:47 am
by leandro
Hola buenos días de nuevo

Podemos hacer peticiones de tipo POST desde webview?

Re: Petición POST webview

PostPosted: Sun Aug 13, 2023 1:02 pm
by Antonio Linares
Estimado Arevalo,

El ejemplo webviewlogin.prg realiza una petición tipo POST al identificar al usuario, te refieres a eso ?

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 12:42 am
by leandro
Antonio buenas noches, gracias por responder

No, me refería a eso, lo que pasa es que necesito pasar a una dirección web, un json demasiado grande y por GET el servidor me dice que no esta permitido por que la url es demasiado larga, entonces pensé que envés de enviarlo por GET, pueda enviar mencionado archivo al servidor mediante una petición POST.

Espero hacerme entender,

de antemano gracias

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 5:18 am
by Antonio Linares
Estimado Leandro,

Has considerado usar Curl ?

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 4:03 pm
by leandro
Has considerado usar Curl ?

Si en algún momento lo intentamos, pero desafortunadamente no funciona con xharbour.

Antonio, lo que pasa es que necesito enviarle cierta información al servidor, para que haga un proceso y me devuelva otra información y mostrarla después de procesada en el webview.

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 4:24 pm
by cmsoft
Leandro:
Puedes tambien enviar mediante el objet Createobject("MSXML2.ServerXMLHTTP") y luego leer por get la informacion deseada, pero ahi tienes que tener el control del servidor web y de tu aplicacion, pero creo por lo que lei antes que ese es tu caso

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 6:37 pm
by leandro
Cesar gracias por responder

Pues es que por GET lo estamos haciendo de momento, pero como mencione anteriormente, el problema es que el servidor (si tenemos el control) nos dice que la url es demasiado larga.

Code: Select all  Expand view

cEp := hb_jsonEncode( RsToHash( oRsEp ) )
cEp := hb_base64encode(cEp,len(cEp))   

oWebVwLg := TWebView():New(, oWid:hWnd )
oWebVwLg:Navigate( "https://nuestraurl/index?aep="+cEp ) //ESTA CADENA PUEDE SER DEMASIADO LARGA, "CREO" QUE SI LA ENVIAMOS POR POST NO VAMOS A TENER PROBLEMAS CON EL TAMAÑO
oWebVwLg:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
oWebVwLg:Bind( "SendToFWH" )
oWebVwLg:bOnBind = { | cJson, cCalls | EVAL(cbLog, cJson ) }
 

Re: Petición POST webview

PostPosted: Mon Aug 14, 2023 8:40 pm
by cmsoft
Leandro:
Yo digo algo asi
Code: Select all  Expand view

STATIC oOle
FUNCTION Main()
LOCAL aRecord, cJson
oOle := Createobject("MSXML2.ServerXMLHTTP")
aRecord  := hash()
aRecord["ID"] = 1
aRecord["DATO2"] = "MIDATO2"
aRecord["DATO3"] = "MIDATO3"
cJson := hb_jsonEncode(aRecord,.f.)
SendPostToUrl( "https://nuestraurl/miapi", cJson, "application/json")
oWebVwLg := TWebView():New(, oWid:hWnd )
oWebVwLg:Navigate( "https://nuestraurl/vista?ID="+aRecord["ID"] )
RETURN nil

STATIC Function SendPostToUrl( cUrl, cParams,cContentType,cAuthorization )
    Local cRet:="",uRet
    default cContentType:="application/json"
    default cAuthorization:=""
   
    oOle:Open( 'POST', cUrl, .f. )
   
    oOle:SetRequestHeader( "Content-Type",cContentType)
    if !empty(cAuthorization)
        oOle:SetRequestHeader( "Authorization",cAuthorization)
    end if    
    oOle:Send( cParams )
    //SysRefresh()
   
    cRet:=""
    IF !oOle:ResponseBody = NIL
       hb_jsonDecode(oOle:ResponseBody,@cRet)        
       ELSE
       cRet := oOle:ResponseText
    ENDIF
Return cRet
 


Entonces, en tu servidor espera en la ruta miapi un formulario tipo post que hace un proceso con los datos que le pasas en aRecord
Y luego en tu servidor, en la ruta vista, busca esos datos que ya se guardaron en el servidor y los procesa para mostrarlos
No se si fui claro