相关疑难解决方法(0)

使用Python请求发布JSON

我需要将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)

有任何想法吗?

python json cherrypy python-requests

545
推荐指数
8
解决办法
71万
查看次数

Python请求:在单个请求中发布JSON和文件

我需要进行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数据和文件有关.

关于如何使这个工作的任何想法?

python json urllib2

28
推荐指数
2
解决办法
4万
查看次数

使用python将json和文件发送到flask

我有这个问题,我试图在单个函数中向烧瓶 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 并在本地写入文件的语法是什么?

post json file request flask

6
推荐指数
2
解决办法
2万
查看次数

卷曲如何POST多部分/表单数据数据以及如何读取flask请求中的multipart/form-data

我尝试通过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)

它确实打印了数据,但我不知道如何读取流对象并将文件存储到磁盘.

python curl multipartform-data flask

3
推荐指数
1
解决办法
7915
查看次数