1099 Stimmen

Wie POST JSON-Daten mit Python-Anfragen?

Ich brauche POST ein JSON von einem Client zu einem Server. Ich bin mit Python 2.7.1 und simplejson. Der Client verwendet Requests. Der Server ist CherryPy. Ich kann GET eine hart codierte JSON vom Server (Code nicht angezeigt), aber wenn ich versuche, POST eine JSON an den Server, erhalte 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?

12voto

isa Punkte 512
headers = {"charset": "utf-8", "Content-Type": "application/json"}
url = 'http://localhost:PORT_NUM/FILE.php'

r = requests.post(url, json=YOUR_JSON_DATA, headers=headers)
print(r.text)

10voto

Ruhil Jaiswal Punkte 135

Funktioniert perfekt mit Python 3.5+

Kunde:

import requests
data = {'sender':   'Alice',
    'receiver': 'Bob',
    'message':  'We did it!'}
r = requests.post("http://localhost:8080", json={'json_payload': data})

Server:

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)

    @cherrypy.tools.json_in()
    @cherrypy.tools.json_out()
    def POST(self):
        self.content = cherrypy.request.json
        return {'status': 'success', 'message': 'updated'}

8voto

Ash Punkte 43

Mit aktuellen requests können Sie jede Datenstruktur übergeben, die in gültiges JSON ausgibt, mit der json Parameter, nicht nur Wörterbücher (wie in der Antwort von Zeyang Lin fälschlicherweise behauptet).

import requests
r = requests.post('http://httpbin.org/post', json=[1, 2, {"a": 3}])

Dies ist besonders nützlich, wenn Sie die Elemente in der Antwort ordnen müssen.

-1voto

Pushparaj Punkte 84

Es wird immer empfohlen, dass wir die Fähigkeit haben müssen, die JSON-Datei zu lesen und ein Objekt als Anfragekörper zu analysieren. Wir werden die Rohdaten in der Anfrage nicht analysieren, so dass die folgende Methode Ihnen helfen wird, dies zu lösen.

def POST_request():
    with open("FILE PATH", "r") as data:
        JSON_Body = data.read()
    response = requests.post(url="URL", data=JSON_Body)
    assert response.status_code == 200

-1voto

Birk Net Punkte 19

Ich habe es auf diese Weise gelöst:

from flask import Flask, request
from flask_restful import Resource, Api

req = request.json
if not req :
    req = request.form
req['value']

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X