2016-10-10 2 views
1

Ich versuche, ein Dashboard auf Grafana mit ihrer Backend-API zu erstellen. Ich teste zuerst, dass mein API-Token mithilfe von GET eingerichtet wurde, und erhalte erfolgreich einen Rückgabecode von 200 (siehe unten). Ich versuche dann, POST zu verwenden, um ein einfaches Dashboard zu erstellen, aber ich bekomme immer einen Returncode von 400. Ich bin mir ziemlich sicher, dass es etwas mit der Payload zu tun hat, die ich senden will, aber ich konnte es nicht herausfinden . Hier ist der Link zu der Beispielseite, die ich für ihr JSON-Format verwende.Kann mit Hilfe von Python3-Modulanforderungen nicht an POST an POST senden.

http://docs.grafana.org/reference/http_api/
import requests 


headers = {"Accept": "application/json","Content-Type": "application/json" ,"Authorization": "Bearer xxx"} 

r = requests.get("http://www.localhost",headers=headers) 
print(r.text) 
print(r.status_code) 



dashboard = {"id": None, 
      "title": "API_dashboard_test", 
      "tags": "[CL-5]", 
      "timezone": "browser", 
      "rows":"[{}]", 
      "schemaVersion": 6, 
      "version": 0 
      } 
payload = {"dashboard": "%s" % dashboard} 
url = "http://www.localhost/api/dashboards/db" 

p = requests.post(url,headers=headers, data=payload) 
print(p) 
print(p.status_code) 
print(p.text) 

OUTPUT:

200 
<Response [400]> 
400 
[{"classification":"DeserializationError","message":"invalid character 'd' looking for beginning of value"},{"fieldNames":["Dashboard"],"classification":"RequiredError","message":"Required"}] 
+0

'Nutzlast = { "Armaturenbrett": Armaturenbrett}' –

+0

http://stackoverflow.com/questions/39954475/post-request-works-in-postman-but-not -in-python/39954514 # 39954514, –

+0

@PadraicCunningham Das war ein Problem, das ich hatte. Ich musste auch die Syntax für den Rest meiner Argumente ändern, die falsch mit dem Konvertieren des Python-Objekts in eine JSON-Zeichenfolge als Sub angegeben wurde, danke. –

Antwort

2

Das Problem ist, dass Ihr Objekt Objekt nicht um eine tatsächliche json ist.

können Sie post-Methode mit json verwenden = YOUR_PYTHON_OBJECT

So Ihren Code zu beheben, das Wörterbuch ändern, nur einen regulären Python-Wörterbuch zu verwenden, json = Nutzlast, anstatt data = Nutzlast verwenden.

So Ihr Code Refactoring, müssen Sie:

import requests 
headers = {"Accept": "application/json", 
      "Content-Type": "application/json", 
      "Authorization": "Bearer xxx" 
      } 

r = requests.get("http://www.localhost", headers=headers) 
print(r.text) 
print(r.status_code) 

dashboard = {"id": None, 
      "title": "API_dashboard_test", 
      "tags": ["CL-5"], 
      "timezone": "browser", 
      "rows": [{}], 
      "schemaVersion": 6, 
      "version": 0 
      } 
payload = {"dashboard": dashboard} 
url = "http://www.localhost/api/dashboards/db" 

p = requests.post(url, headers=headers, json=payload) 
print(p) 
print(p.status_code) 
print(p.text) 

Beachten Sie die Unterschiede in Armaturenbrett, zum Beispiel "Reihen" wurde aus geändert "[{}]", um nur [{}], so dass es ist ein Python-Objekt (Liste mit leerem Wörterbuch) und keine Zeichenfolge.

Der Ausgang ist

200 
<Response [200]> 
200 
{"slug":"api_dashboard_test","status":"success","version":0} 
Verwandte Themen