我需要将JSON从客户端POST到服务器.我正在使用Python 2.7.1和simplejson.客户端正在使用请求.服务器是CherryPy.我可以从服务器获取硬编码的JSON(代码未显示),但是当我尝试将JSON发送到服务器时,我得到"400 Bad Request".
这是我的客户端代码:
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)
Run Code Online (Sandbox Code Playgroud)
这是服务器代码.
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())
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我需要进行API调用以上传文件以及带有文件详细信息的JSON字符串.
我试图使用python请求lib来做到这一点:
import requests
info = {
'var1' : 'this',
'var2' : 'that',
}
data = json.dumps({
'token' : auth_token,
'info' : info,
})
headers = {'Content-type': 'multipart/form-data'}
files = {'document': open('file_name.pdf', 'rb')}
r = requests.post(url, files=files, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
raise ValueError("Data must not be a string.")
ValueError: Data must not be a string
Run Code Online (Sandbox Code Playgroud)
如果我从请求中删除"文件",它就可以了.
如果我从请求中删除"数据",它就可以工作.
如果我不将数据编码为JSON,则可以正常工作.
出于这个原因,我认为错误与在同一请求中发送JSON数据和文件有关.
关于如何使这个工作的任何想法?
我有这个问题,我试图在单个函数中向烧瓶 API 发送/接收一些文件和 JSON。
在我的客户(发件人)上,我有:
#my json to be sent
datas = {'var1' : 'var1','var2' : 'var2',}
#my file to be sent
local_file_to_send = 'user_picture.jpg'
url = "http://10.100.2.6:80/customerupdate"
headers = {'Content-type': 'multipart/form-data'}
files = {'document': open(local_file_to_send, 'rb')}
r = requests.post(url, files=files, data=datas, headers=headers)
Run Code Online (Sandbox Code Playgroud)
在我的 Flask 服务器上,我有:
class OPERATIONS(Resource):
@app.route('/',methods=['GET'])
def hello_world():
return 'Hello World!'
@app.route('/customerupdate',methods=['GET','POST'])
def customerupdate():
event_data_2 = json.loads(request.get_data().decode('utf-8'))
print event_data_2
Run Code Online (Sandbox Code Playgroud)
我收到这条错误消息,告诉我数据实际上既不是 json 格式也不是 utf8 格式。如果我打印“get_data”的内容而不尝试解码它会显示一些二进制字符..
我的客户端读取 json 并在本地写入文件的语法是什么?
我尝试通过CURL发布multipart/form-data,其中包含,
- 一个JSON对象
- 流对象pdf和jpeg文件
curl -i -X POST -H
"Authorization":"eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY" -H
"Content-Type:application/multipart/form-data" -d '{"user data": {"preferred_city":"Newyork","within_radious":"5"}}' --data-binary
"uploaded_documents":@mydocument.pdf http://127.0.0.1:5000/api/city
Run Code Online (Sandbox Code Playgroud)
现在,我需要在flask请求object.i中读取这个多部分数据
request.data
Run Code Online (Sandbox Code Playgroud)
它确实打印了数据,但我不知道如何读取流对象并将文件存储到磁盘.