2011-01-26 1 views
2

다음 코드를 사용하여 toggl api에 연결하면 정상적으로 인증됩니다.urllib2를 사용하여 json 데이터를 toggl api에 보내려고 할 때 HTTP 오류 400

username = token 
password = 'api_token' 
url = 'http://www.toggl.com/api/v3/tasks.json' 

req = urllib2.Request(url) 
auth_string = base64.encodestring('%s:%s' % (username, password)) 
req.add_header("Authorization", "Basic %s" % auth_string) 
f = urllib2.urlopen(req) 
response = f.read() 

새로운 작업을 시작하려고하면 json 형식으로 데이터를 보내야합니다. 테스트하려면, 내 JSON 객체를 만들어 내 Request 객체

data = simplejson.dumps({ 
    'task':{ 
     'duration': 1, 
     'billable': True, 
     'start': '2010-02-12T16:19:45+02:00', 
     'description': 'This is a test task', 
    } 
}) 
req = urllib2.Request(url, data) 

에 데이터를 추가하지만 지금 내가받을 수있는 유일한 응답은 "urllib2.HTTPError : HTTP 오류 400 : 잘못된 요청". 누군가 내가 잘못 가고있는 곳을 가르쳐 주시겠습니까?

답변

3

API documentation에 따르면 최소한 헤더가 누락되었습니다. 시도 :

req = urllib2.Request(url, data, {"Content-type": "application/json"}) 

충분하지 않은 경우 데이터에 urllib.urlencode을 사용해보십시오. 여전히 충분하지 않은 경우 API 예와 같이 요청에 user : 비밀번호를 추가하십시오.

+0

헤더에 대한 팁 주셔서 감사합니다. 이제 500 오류가 발생합니다. 따라서 나는 지나가는 json 객체에 문제가 있다고 생각합니다. –

2

나는 그것을 알아 냈다. TryPyPy 덕분에 요청에 'Content-type'헤더를 추가해야했습니다.

인증 문자열에서 줄 바꿈 문자와 줄 바꿈 문자를 제거해야했습니다.

auth_string = base64.encodestring('%s:%s' % (username, password)).strip() 
관련 문제