Italian POST Json

Luciano Veneziano

Active Member
Licensed User
Longtime User
Salve a tutti!
Non riesco a tirar giù lo skeleton di un'app per fare un login usando json.
Qualcuno ha un'app che faccia questo? Mi serve solo per riuscire a capire se dal lato server funziona.
Grazie a tutti.
 

drgottjr

Expert
Licensed User
Longtime User
i server non sono tutti uguali per quanto riguarda quello que aspettano dal cliente.
devi sapere esattamente tutti i campi ad inviare.
partendo da un minimo, ad es, - utente e password -
si fa cosi:

B4X:
' declarare un map
Dim jsonmap As Map

' fa la stringa a mandare (in forma json)
jsonmap = CreateMap("nome":"bellucci","password":"monica")

' declarare un "generatore" di json
Dim jsong As JSONGenerator
jsong.Initialize(jsonmap)

' declarare la richiesta al server
Dim job As HttpJob
job.Initialize("",Me)

' mandala
job.poststring("https://www.foobar.com/login", jsong.ToString)    '    <<<<<< attenzione!

'nb: e' possibile che il server aspetti altri dati che si ignorano in questo momento.  devi ricercarlo

' aspetta la risposta dal server
wait for (job) jobdone(job As HttpJob)
If job.Success Then
    Log( job.getstring )
Else
    Log( job.ErrorMessage )
End If
job.Release
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
Ti ringrazio.
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
Alla fine la chiamata per inviare in POST una stringa JSON è questa:
le variabili jj, ss, token As String sono globali

B4X:
Sub findJSONkey(JSONResults As String, key As String) As String ' per tirare brutalmente  fuori il valore della key JSON
    Dim Parser As JSONParser
    Parser.Initialize(JSONResults)

    Dim TheRoot As Map = Parser.NextObject
    Return TheRoot.Get(key)
End Sub

Sub JobDone (Job As HttpJob)
    Log("Job = " & Job.JobName & ", OK = " & Job.Success)
    Log(Job.GetString)
    Log("---------------------------------------------")
    
    If Job.Success = True Then
        Select Job.JobName
            Case "Login"
                token = findJSONkey(Job.GetString,"access")
                Log("access: " & token)
                ToastMessageShow("Token memorizzato.", True)
            Case "Test"
                ToastMessageShow("Test eseguito.", True)    
        End Select
    Else
        Log("Error: " & Job.ErrorMessage)
        ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release
End Sub


sub jsonCall
    Dim job As HttpJob

    token = ""
    ss = "http://vattelappesca.it/api/token/"
    jj =  $"{"email":"merovingio@xxxxx.com","password":"12345678"}"$

    job.Initialize("Login",Me)
        
    job.PostString(ss,jj)
    job.GetRequest.SetContentType("body/raw")
    job.GetRequest.SetContentType("application/json")
End Sub
 

Xfood

Expert
Licensed User
Ottimo @Luciano Veneziano , grazie per aver condiviso la soluzione,
non mi e' chiara una cosa, la variabile token a cosa ti serve? Quando la utilizzi?
Vedo che la inizializxi sempre cosi
token = "",
E poi non fai altro che leggere il valore di ritorno del token
<code>
Case "Login"
token = findJSONkey(Job.GetString,"access")
Log("access: " & token)
ToastMessageShow("Token memorizzato.", True)
Case "Test"
<code\>

Quando si usa il valore del token?
A cosa serve in questo caso il token?
Scusa la mia ignoranza
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
La v
La variabile token viene generata dal server in fase di login ed è pseudo random
Lo scopo è che passandola in Authorization permette di effettuare operazioni di scrittura altrimenti negate.

B4X:
    job.Initialize("Test",Me)
    job.Download(ss)
    job.GetRequest.SetHeader("Authorization", "Bearer " & token)
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…