慢拍搖滾樂的解決方案工作發送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