Reputation: 1635
I am trying to send a POST to the Box API but am having trouble with sending it through Python. It works perfectly if I use 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
But with my python code I get a 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)
The problem lies in my session_data
. It needs to be a buffer in the standard application/x-www-form-urlencoded format (http://docs.python.org/2/library/urllib2.html), so I do a urlencode
, however the output is 'duration=60&document_id=MY_API_KEY'
, which does not preserve { } format.
Any ideas?
Upvotes: 0
Views: 166
Reputation: 2598
You can try python-boxview. It's tiny python library for BoxView.
from boxview import boxview
api = boxview.BoxView('YOUR_API_KEY')
ses = api.create_session('DOCUMENT_ID', duration=90)
Upvotes: 0
Reputation: 8685
For the View API (and the Content API), the body data, session_data
in your code, needs to be encoded as JSON.
All you need to do is import the json module at the beginning of your code (i.e. import json
) and then change
session_data = urllib.urlencode(session_data)
to
session_data = json.dumps(session_data)
dumps() converts the python dict into a JSON string.
(as a sidenote, I would highly recommend not using urllib and using the Requests library instead.)
Upvotes: 2