2017-12-19 1 views
0

Ich bin ziemlich neu in der Verwendung von APIs, also bitte mit mir hier. Ich habe nach anderen Problemen wie diesem gesucht, bin aber auf keine Lösungen gestoßen, die meinem Problem helfen könnten.Put-API-Anfrage in Python Fehler zurückgegeben

Mit Postman kann ich eine Put-Anfrage mit JSON machen und es funktioniert gut. Wenn ich versuche, den gleichen JSON Körper in Python zu verwenden, erhalte ich diese Fehlermeldung:

{'code': 'E.Internal', 'error': 'An internal error has occurred processing your request. Please notify Customer Support for assistance.', 'status': 'error'} 

Die Kundenbetreuung des Unternehmens nicht zu nützlich ist, so wollte ich sehen, ob hier jemand mir stattdessen helfen könnte.

Hier ist mein Skript:

url = 'https://website.com/rest/site/' + record_id 

json_body = (JSON body here, same one that works in Postman) 
head = {'Accept':'application/json', 'Content-Type': 'application/json'} 

response = requests.put(url, auth=(username, password), json=json_body, headers=head) 
data = response.json() 
print(data) 

Wenn ich die requests.put ändern alles nach "auth = (Benutzername, Passwort)" es funktioniert gut und gibt den json des Datensatzes requests.get-and-Drop , also kann ich mich mit der API verbinden, einfach nichts mit Python einfügen. Auch hier funktioniert im Prinzip genau dasselbe bei Postman.

Was genau mache ich falsch und wie gebe ich die Daten ein?

+0

Bitte reduzieren Sie Ihr Programm auf das kürzestmögliche ** komplette ** Programm, das den Fehler zeigt. Versuchen Sie, eine öffentlich verfügbare URL zu verwenden, um Ihren Fehler zu reproduzieren (z. B. "http: // httpbin.org/put"). Wenn ich Ihr Programm modifiziere, um 'httpbin.org/put' zu benutzen und die' json_body' Zeile auszufüllen, bekomme ich keinen Fehler. Weitere Informationen darüber, warum und wie ein reproduzierbarer Testfall bereitgestellt wird, finden Sie in [mcve]. –

+0

FYI, hier ist das Beispiel, das ich aus Ihrem Code-Snippet erstellt habe: https://ideone.com/eerflC –

+1

Es ist eine lange Zeit her, seit ich Anfragen verwendet habe, aber sollte nicht die JSON-Stelle in den "Daten" sein Feld? Also "requests.put (url, auth = (Benutzername, Passwort), data = json_body, headers = head)" – sehafoc

Antwort

1

Gemäß der Anfrage-Dokumentation füllen Sie die Put-Funktion nicht korrekt aus. Versuchen Sie es so?

import json 
import requests 

url = 'https://website.com/rest/site/' + record_id 

headers = { 
    "Content-Type": "application/json", 
    'Accept':'application/json' 
} 

payload = json.dumps({ 
    "data_goes_here": None 
}) 

rv = requests.put(url, data=payload, headers=headers, verify=False) 
if rv.status_code > 399: 
    rv.raise_for_status() 
print(json.loads(rv.text)) 
Verwandte Themen