2017-03-29 7 views
0

Ich arbeite an einem Python-Skript, das mit der API eines CRM-Systems kommunizieren werde, das ich gerade aktiviere. Ich kann Daten vom CRM-Server erhalten, aber ich kann nicht scheinen, einen neuen Eintrag hinzuzufügen (zu schreiben). Ich vermute, dass ich etwas Dummes mache, weil ich mit Python und Programmierung im Allgemeinen ziemlich neu bin, kann mir jemand in die richtige Richtung zeigen? Der Server lehnt die Daten nicht ab, aber er verhält sich so, als ob ich Daten von /api/v1.0/payments anfordern würde, anstatt neue Daten zu posten.Python 3 urlopen Verwendung

from urllib.request import Request, urlopen 

headers = { 
    'Content-Type': 'application/json', 
    'X-Auth-App-Key': '[API key]' 
} 

values = b""" 
    { 
"clientId": 104, 
"method": 3, 
"checkNumber": "", 
"createdDate": "2016-09-12T00:00:00+0000", 
"amount": 40, 
"note": "", 
    } 
""" 

request = Request('http://[SERVER_URL]/api/v1.0/payments', data=values, headers=headers) 

response_body = urlopen(request).read() 
print(response_body) 

Ich arbeite aus der API-Dokumentation hier auf Beispielcode basiert: http://docs.ucrm.apiary.io/#reference/payments/payments/post

Bin ich am Boden richtig mit urlopen?

+0

Sie scheinen keine Daten zu ändern, nur fordern und einige Informationen drucken. Was genau würdest du gerne machen? Welche Fehlermeldungen (falls vorhanden) erhalten Sie? –

Antwort

0

This question/answer kann Ihr Problem sein. Grundsätzlich wird Ihre POST-Anfrage an /api/v1.0/payments/ umgeleitet (beachten Sie den abschließenden Schrägstrich), wenn dies der Fall ist, wird Ihr POST zu einer GET-Anfrage umgeleitet, weshalb der Server antwortet, als ob Sie versuchen würden, abzurufen alle Zahlungsinformationen

Andere Dinge zu beachten sind Ihre Json-Daten ist tatsächlich ungültig, da es einen nachgelagerten , nach dem 'Note' Wert enthält, so dass ein Problem Problem auch sein kann. Ich denke, Sie können auch die Content-Length Header in Ihren Headern vermissen. Ich würde empfehlen, das json Modul mit Ihren JSON-Daten zu erstellen:

values = json.dumps({ 
    "clientId": 104, 
    "method": 3, 
    "checkNumber": "", 
    "createdDate": "2016-09-12T00:00:00+0000", 
    "amount": 40, 
    "note": "" 
}) 

headers = { 
    'Content-Type': 'application/json', 
    'Content-Length': len(values), 
    'X-Auth-App-Key': '[API key]' 
} 

request = Request('http://[SERVER_URL]/api/v1.0/payments/', data=values, headers=headers) 
+0

Danke für die Hilfe. Der Server lehnt die Daten nicht ab, sondern sendet dieselbe Antwort, als ob ich Informationen von /api/v1.0/payments abrufen wollte (alle vorhandenen Zahlungsinformationen werden auf dem Server im JSON-Format ausgegeben). Ich denke, dies könnte ein Problem mit dem Beispielcode sein, mit dem ich arbeite, aber ich möchte Probleme mit meinem eigenen Code beheben, bevor ich zu den Foren der Plattform gehe. Wird das JSON-Modul nur als Best Practice verwendet oder gibt es ein Problem mit dem Format meines Codes? – Detoxica

+0

Ich würde es als beste Praxis betrachten, aber ich bin keine Autorität in dieser Angelegenheit. Es ist sicherlich vielseitiger, da Sie leicht Python-Ausdrücke für die Werte der Objektschlüssel verwenden können. Nur Problem mit dem Format Ihres Codes ist das abschließende Komma in "Note": "", '. – mshildt

+0

Die zusätzlichen Informationen, die Sie in Ihrem ersten Kommentar angegeben haben, sollten in der Hauptfrage enthalten sein. Es hilft wirklich, das tatsächliche Problem zu beschreiben, das Sie haben. Sehen Sie meine Updates zu meiner Antwort ... – mshildt