0

我正在尝试向 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',不保留 { } 格式。

有任何想法吗?

4

2 回答 2

2

对于 View API(和 Content API),session_data代码中的正文数据需要编码为JSON

您需要做的就是在代码开头(即import json)导入 json 模块,然后更改

session_data = urllib.urlencode(session_data)

session_data = json.dumps(session_data)

dumps() 将 python dict 转换为 JSON 字符串。

(作为旁注,我强烈建议不要使用 urllib 而是使用Requests库。)

于 2013-12-05T02:31:28.193 回答
0

你可以试试python-boxview。它是 BoxView 的小型 Python 库。

   from boxview import boxview

   api = boxview.BoxView('YOUR_API_KEY')
   ses = api.create_session('DOCUMENT_ID', duration=90)
于 2014-10-31T16:13:25.520 回答