2014-01-19 11 views
0

Box에서 파일을 만들 수없는 이유를 모르겠습니다. 주변 설정을 변경하려고했지만 여전히 해결책을 찾을 수 없습니다.Box API 액세스가 거부되었습니다. 폴더를 만들려고 할 때 사용 권한 문제가 발생했습니다.

#from django.shortcuts import render 
from django.http import HttpResponse 
from rauth import OAuth2Service 
import json 

# Create your views here. 
def access_box(request): 
    CLIENT_ID = 'xxx' 
    CLIENT_SECRET = 'xxx' 
    box_storage = OAuth2Service(
          name='Box', 
          client_id=CLIENT_ID, 
          client_secret=CLIENT_SECRET, 
          authorize_url='https://www.box.com/api/oauth2/authorize', 
          access_token_url='https://www.box.com/api/oauth2/token', 
          base_url='https://www.box.com/' 
          ) 
    redirect_uri = 'http://127.0.0.1:8000/access-box/' 

    params = {   
      'redirect_uri': redirect_uri, 
      'response_type': 'code',   
      } 
    url = box_storage.get_authorize_url(**params) 

    if request.GET:   
     if request.GET.get('code'): 
      code = request.GET.get('code') 
      data = {'code': code, 
        'grant_type': 'authorization_code', 
        'redirect_uri': redirect_uri, 
        }  

      payload = { 
         'name': 'testfolder', 
         'id': '0', 
         } 
      session = box_storage.get_auth_session(data=data, decoder=json.loads) 
      r = session.post('https://api.box.com/2.0/folders', params=payload) 
      print(r.url) 
      print(r.json()) 
      #r = r.json() 
      #html = "<html><body>request available! authentication code: {0}<p>{1}</p></body></html>".format(code, r) 
      html = "<html><body>request available! authentication code: {0}</body></html>".format(code)  
      return HttpResponse(html) 
     else: 
      return HttpResponse("zilch!") 
    else: 
     html = "<html><body></h1>Allow rushdGYM access to Box.com</h1><p><a href='{0}'>Allow now</a></body></html>".format(url)  
     return HttpResponse(html) 

이 내가 폴더 @ 상자를 만들려고받은 응답입니다 : 여기 내 장고의 뷰 파일 내부 코드입니다.

{u'status': 400, u'code': u'bad_request', u'request_id': u'2143252gdf3', u'context_info': {u'errors': [{u'reason': u'missing_parameter', u'message': u"'parent' is required", u'name': u'parent'}, {u'reason': u'missing_parameter', u'message': u"'name' is required", u'name': u'name'}]}, u'help_url': u'http://developers.box.com/docs/#errors', u'message': u'Bad Request', u'type': u'error'} 

나를 올바른 방향으로 인도하기위한 지침이 있습니까?

답변

3

먼저 게시 한 오류 메시지를 살펴보십시오.

[ 
    {u'reason': u'missing_parameter', u'message': u"'parent' is required", u'name': u'parent'}, 
    {u'reason': u'missing_parameter', u'message': u"'name' is required", u'name': u'name'} 
] 

그래서, 당신은 귀하의 요청에 parentname를 제공해야합니다 : 그것은 분명히 오류가 무엇인지 말한다.


둘째, 상자 API는 페이로드가 JSON으로 인코딩되어 본문에 표시 될 것으로 예상합니다.

지금까지는 인수를 session.post에 사용하여 요청 (GET) 매개 변수로 보내면 대신 data 인수를 사용해야합니다.

Content-Type 헤더를 application/json으로 설정하고 싶을 수도 있습니다.

0

감사 토마스 O. 나는 당신이 제안데이터를 사용하고 JSON내 페이로드를 암호화하고, 그 일을!

r = session.post('https://api.box.com/2.0/folders', data=json.dumps(payload)) 
+2

당신은 아마 https://api.box.com에 기본 URL을 변경해야합니다 :

나는 단지이 변경했습니다. 인증 URL은 www.box.com이지만 모든 API 호출은 api.box.com으로 이동합니다. – Peter