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

spunky1a

Member
ich versuche einen Wechselrichter per Api abzufragen, der curl-post dazu ist:
B4X: Copy
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: Copy
    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: Copy
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?
 
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
 
danke, du meinst so z.B.:
B4X: Copy
    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.
 
Zusammenfassend wäre es dann

B4X: Copy
    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
 
Back
Top