2017-01-24 8 views
0

Ich versuche, eine Curl-Anfrage in Python durchzuführen. Mein Code ist folgende:Führen Sie eine Curl-Anfrage in Python

url = 'http://xx.xxx.xx.xxx:xxxx/api/common/learningSessions/588752bef1d4654173a43015'   
payload = json.loads(open("request.json"))   
headers = {'X-User-Path': '....', 'X-User-Token': '...') 
r = requests.get(url, data=json.dumps(payload), headers=headers) 

Howver ich in der zweiten Zeile erhalten die folgenden Fehler:

TypeError: expected string or buffer (payload = json.loads(open("request.json")))

Jede Idee, was dieser Fehler hier geht?

+0

Aber mein JSON ist validiert. – christosh

Antwort

3

Sie öffnen Datei open("request.json") diese zurückkehren <open file 'request.json', mode 'r' at 0x108526810>.

json.loads brauchen Zeichenfolge. anstelle von Dateiobjekt

können Sie

url = 'http://xx.xxx.xx.xxx:xxxx/api/common/learningSessions/588752bef1d4654173a43015'   
payload = json.loads(open("request.json").read())   
headers = {'X-User-Path': '....', 'X-User-Token': '...') 
r = requests.post(url, data=json.dumps(payload), headers=headers) 

file.read kehrt Dateiinhalt versuchen.

Wenn Sie nicht wollen, read Sie direkt json.loadjson.loads

statt Das ist, was ich

verwenden verwenden versucht
echo '{}' > /tmp/test.json 
cat /tmp/test.json 
{} 

Versuchen gleiche Datei zu lesen.

Python 2.7.10 (default, Jul 30 2016, 19:40:32) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import json 
>>> payload = json.loads(open("/tmp/test.json").read()) 
>>> print payload 
{} 
+0

Dann erhalte ich in der gleichen Zeile: ValueError: Kein JSON-Objekt konnte in der gleichen Zeile decodiert werden. – christosh

+0

@christosh kannst du deine Datei 'content' geben? weil ich mit Probe 'json' probierte und seine Funktion gut – Nilesh

+0

Beim Versuch, Payload = json.loads (open (" request.json "). read()) Ich habe den gleichen Fehler. – christosh

3

expected string or buffer

open() gibt eine Datei zurück.

Und es gibt einen Unterschied zwischen json.load() und json.loads() (die zweite akzeptiert eine Zeichenfolge, keine Datei)

Außerdem, ich glaube nicht, das json.dumps() notwendig ist

2

Sie verwenden json.loads() aber versuchen, eine Datei zu laden. Sie müssen stattdessen json.load() verwenden.

payload = json.load(open("request.json")) 
+0

Dann erhalte ich in derselben Zeile: ValueError: Kein JSON-Objekt konnte decodiert werden – christosh

+2

@christosh dann ist deine 'json'-Datei nicht' json format' gültig , überprüfen Sie bitte das Format in einigen Validator – Nilesh

+0

Mein Json enthält nur {}. Eigentlich möchte ich nicht posten. – christosh