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
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
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
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
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)
 
Top