German "curl -X POST..." in b4a umsetzen

spunky1a

Member
ich versuche einen Wechselrichter per Api abzufragen, der curl-post dazu ist:
B4X:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"username":"master","nonce":"masterpasswort"}' 'http://192.168.178.97/api/v1/auth/start'

ich habe versucht es in b4a umzusetzen:
B4X:
    job1.Initialize("GetMyToken", Me)
    job1.PostString("http://192.168.178.97/api/v1/auth/start", "username=master&nonce=masterpasswort")
    job1.GetRequest.SetHeader("Content-Type:", "application/json")
    job1.GetRequest.SetHeader("Accept:", "Application/json")
    Wait For (job1) JobDone(job1 As HttpJob)
    If job1.Success = True  Then
        Log(job1.GetString)
    Else
        Log(job1.ErrorMessage)
    End If
    job1.Release

aber ich bekomme nur eine Fehlermeldung zurück:
B4X:
ResponseError. Reason: BAD REQUEST, Response: {"errors":{"":"None is not of type 'object'"},"message":"Input payload validation failed"}
{"errors":{"":"None is not of type 'object'"},"message":"Input payload validation failed"}

kann mir jemand helfen?
 

b4x-de

Active Member
Licensed User
Longtime User
Damit kenne ich mich im Detail auch nicht aus. Aber mir ist an deinem Code etwas aufgefallen.

Kann es sein, dass durch curl ein json gesendet wird? {"username":"master","nonce":"masterpasswort"}

Beim job1.PostString sendest du aber kein json, sondern Http-Parameter. Versuch doch einmal den String "username=master&nonce=masterpasswort" durch das json {"username":"master","nonce":"masterpasswort"} zu ersetzen.

Viele Grüße
Thomas
 

spunky1a

Member
danke, du meinst so z.B.:
B4X:
    Dim json1 As JSONGenerator
    Dim map1 As Map = CreateMap("username":"user", "nonce":"passwort")
    json1.Initialize(map1)
    
    Dim job1 As HttpJob
    job1.Initialize("GetMyToken", Me)
    job1.PostString("http://192.168.178.97/api/v1/auth/start", json1.ToString)
    job1.GetRequest.SetHeader("Content-Type:", "application/json")
    job1.GetRequest.SetHeader("Accept:", "application/json")
    Wait For (job1) JobDone(job1 As HttpJob)
    If job1.Success = True  Then
        Log(job1.GetString)
    Else
        Log(job1.ErrorMessage)
    End If
    job1.Release
...geht leider auch nicht.
 

DonManfred

Expert
Licensed User
Longtime User
Zusammenfassend wäre es dann

B4X:
    Dim json1 As JSONGenerator
    Dim map1 As Map = CreateMap("username":"user", "nonce":"passwort")
    json1.Initialize(map1)
    Dim job1 As HttpJob
    job1.Initialize("", Me)
    job1.PostString("http://192.168.178.97/api/v1/auth/start", json1.ToString)
    job1.GetRequest.SetContentType("application/json")
    job1.GetRequest.SetHeader("Accept", "application/json")
    Wait For (job1) JobDone(job1 As HttpJob)
    If job1.Success = True  Then
        Log(job1.GetString)
        job1.Release
    Else
        Log(job1.ErrorMessage)
        job1.Release
    End If
 
Top