慢拍摇滚乐的解决方案工作发送JSON字符串作为POST请求
他原本指的字典。但是,下面的代码发送JSON字符串还曾用请求的奇迹:
import requests
headers = {
'Authorization': app_token
}
url = api_url + "/b2api/v1/b2_get_upload_url"
content = json.dumps({'bucketId': bucket_id})
r = requests.post(url, data = content, headers = headers)
我与需要我送JSON作为POST请求才能得到结果的API工作。问题是Python 3不会允许我这样做。
下面的Python 2代码工作正常,实际上它的官方样片:
request = urllib2.Request(
api_url +'/b2api/v1/b2_get_upload_url',
json.dumps({ 'bucketId' : bucket_id }),
headers = { 'Authorization': account_authorization_token }
)
response = urllib2.urlopen(request)
但是,使用此代码在Python 3只使它抱怨数据是无效的:
import json
from urllib.request import Request, urlopen
from urllib.parse import urlencode
# -! Irrelevant code has been cut out !-
headers = {
'Authorization': app_token
}
url = api_url + "/b2api/v1/b2_get_upload_url"
# Tested both with encode and without
content = json.dumps({'bucketId': bucket_id}).encode('utf-8')
request = Request(
url=url,
data=content,
headers=headers
)
response = urlopen(req)
我试过urlencode()
,就像你应该这样做。但是这会从Web服务器返回一个400状态码,因为它期望纯JSON。即使纯JSON数据无效,我也需要以某种方式强制Python发送它。
编辑:根据要求,这里是我得到的错误。由于这是一个烧瓶应用,这里的调试器的截图:
添加.encode('utf-8')
给了我一个“预期的字符串或缓冲区”错误
编辑2:与.encode('utf-8')
调试器的Screenshot添加
你不“应该”使用进行urlencode;这是为表单编码的数据,但你发送JSON。但是如果你收到错误,你应该发布它。 –
服务器不支持unicode字符“\ u2119”。创建一个演示服务器,如果要测试另一个。 – dsgdfg
看看这个:[json.dumps与flask.jsonify](https://stackoverflow.com/questions/7907596/json-dumps-vs-flask-jsonify)也许它有帮助。 – rocksteady