Post JSON mit Python-Requests
Ich POST müssen ein JSON von einem client zu einem server. Ich bin mit Python 2.7.1 und simplejson. Der client-Anfragen. Der server ist CherryPy. Ich kann eine hart-codierte JSON vom server (code wird nicht angezeigt), aber wenn ich versuche, eine POST, eine JSON an den server, bekomme ich "400 Bad Request".
Hier ist mein client-code:
data = {'sender': 'Alice',
'receiver': 'Bob',
'message': 'We did it!'}
data_json = simplejson.dumps(data)
payload = {'json_payload': data_json}
r = requests.post("http://localhost:8080", data=payload)
Hier ist der server-code.
class Root(object):
def __init__(self, content):
self.content = content
print self.content # this works
exposed = True
def GET(self):
cherrypy.response.headers['Content-Type'] = 'application/json'
return simplejson.dumps(self.content)
def POST(self):
self.content = simplejson.loads(cherrypy.request.body.read())
Irgendwelche Ideen?
Ich war mit eine abgespeckte version von einem Beispiel direkt aus der Dokumentation.
Mein Kommentar steht immer noch - CherryPy nicht nennen, Klasse
Bitten Sie um die Linie zu sehen, wo die Instanz erzeugt wird?
ja, war ich versucht zu starten, Ihr Beispiel, um es zu testen, und ich nicht sicher war, wie Sie instanziieren wurden.
Der code hat sich geändert. Ich bin jetzt zu schaffen, ohne das zusätzliche argument.
Mein Kommentar steht immer noch - CherryPy nicht nennen, Klasse
__init__
Methoden mit einem content
argument (und hat nicht den Anspruch, in der link, den Sie liefern). In der detaillierten Beispiel Sie haben der Benutzer den code zum aufrufen __init__
und liefert die Argumente, die wir hier noch nicht gesehen also habe ich keine Ahnung, in welchem Zustand sich Ihr Objekt, wenn Ihr # this works
Kommentar relevant ist.Bitten Sie um die Linie zu sehen, wo die Instanz erzeugt wird?
ja, war ich versucht zu starten, Ihr Beispiel, um es zu testen, und ich nicht sicher war, wie Sie instanziieren wurden.
Der code hat sich geändert. Ich bin jetzt zu schaffen, ohne das zusätzliche argument.
cherrypy.quickstart(Root(), '/', conf)
.InformationsquelleAutor Charles R | 2012-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Anfragen version 2.4.2 und höher, können Sie alternativ 'json' - parameter im Aufruf, das macht es einfacher.
EDIT: Diese Funktion wurde Hinzugefügt, um die offizielle Dokumentation. Sie können es hier: Anforderungen-Dokumentation
json
parameter. Ich hatte zu gehen in Github, bevor ich Sie sah, erwähnt er:Die Einstellung der akzeptierten Antwort, da dies ist mehr idiomatische als der 2.4.2. Im Verstand halten, für verrückt unicode, das kann nicht funktionieren.
Ich war in der gleichen Schuhe wie @IAmKale. Dies erleichtert sehr die Kopfschmerzen, die ich hatte mit der AWS-API-Gateway. Es erfordert die POST-Daten im JSON-format standardmäßig.
Dies funktioniert nicht implizit auf datetime.
Wie ein Narr ich habe versucht, die Daten parameter mit application/json Inhaltstyp 🙁
InformationsquelleAutor Zeyang Lin
Es stellt sich heraus, dass ich fehlte die header-Informationen. Die folgenden Werke:
application/json
imGET
und irgendwie verpasst, dass Sie gar nicht auf die Anfrage. Möglicherweise müssen Sie auch, um sicherzustellen, dass Sie wieder etwas vonPOST
oder Sie könnten eine500
.Scheint nicht nötig zu sein. Wenn ich drucken
r
bekomme ich<Response [200]>
.Wie kann ich diese abrufen json auf server-Seite ?
r = requests.get('localhost:8080') c = r ist.Inhalt Ergebnis = simplejson.Lasten(c)
Danke.
headers
hat den trick.InformationsquelleAutor Charles R
Sich aus Anfragen 2.4.2 (https://pypi.python.org/pypi/requests), die "json" - parameter unterstützt. Keine Notwendigkeit, geben Sie "Content-Type". Also die kürzere version:
InformationsquelleAutor ZZY
Der bessere Weg ist,:
Content-type: application/json
ist überflüssig wie diejson=
bereits Hinweise darauf, dass.völlig einverstanden, aber auf Anfrage neuere version Elasticsearch Server benötigen, setzen
Content-type
InformationsquelleAutor ellen
Funktioniert perfekt mit python 3.5+
client:
server:
InformationsquelleAutor Ruhil Jaiswal
Dieser funktioniert perfekt für Python-Version 3.5,
Wenn die URL enthält eine Query-String-Parameter-Wert,
Anfrage URL = https://baaaah2.com/ws/rest/v1/concept/
Parameter Wert = 21f6bb43-98a1-419d-8f0c-8133669e40ca
InformationsquelleAutor MAX