我正在尝试向Box API发送POST,但是在通过Python发送它时遇到了麻烦。如果我使用curl,它的效果非常好:
curl https://view-api.box.com/1/sessions \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"document_id": "THE_DOCUMENT_ID", "duration": 60}' \
-X POST
但是使用我的python代码,我得到了HTTP Error 400: BAD REQUEST
headers = {'Authorization' : 'Token '+view_api_key, 'Content-Type' : 'application/json'}
session_data = {"document_id" : doc_id, "duration": 60}
session_data = urllib.urlencode(session_data)
session_request = urllib2.Request("https://view-api.box.com/1/sessions", session_data, headers)
session_response = urllib2.urlopen(session_request)
问题在于我的session_data
。它需要是标准application / x-www-form-urlencoded格式(http://docs.python.org/2/library/urllib2.html)的缓冲区,所以我做urlencode
,但输出是'duration=60&document_id=MY_API_KEY'
,但不是保留{}格式。
有什么想法吗?
答案 0 :(得分:2)
对于View API(和内容API),代码中的正文数据session_data
需要编码为JSON。
您需要做的就是在代码的开头导入json模块(即import json
)然后更改
session_data = urllib.urlencode(session_data)
到
session_data = json.dumps(session_data)
dumps()将python dict转换为JSON字符串。
(作为旁注,我高度建议不要使用urllib而是使用Requests库。)
答案 1 :(得分:0)
您可以尝试python-boxview。它是BoxView的小型python库。
from boxview import boxview
api = boxview.BoxView('YOUR_API_KEY')
ses = api.create_session('DOCUMENT_ID', duration=90)