Ошибка HTTP 400 при попытке отправить данные json с urllib2 в toggl api - PullRequest
2 голосов
/ 26 января 2011

При использовании следующего кода для подключения к toggl api я подключаюсь и авторизован очень хорошо.

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 и добавил данные в свой объект запроса

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 Error 400: Bad Request".Может кто-нибудь указать мне, где я иду не так?

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Согласно документации API , вам не хватает хотя бы заголовка. Попробуйте:

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

Если этого недостаточно, попробуйте использовать urllib.urlencode для данных. Если этого все еще недостаточно, добавьте в запрос пароль user: как в примере API.

2 голосов
/ 28 января 2011

Я понял это. Благодаря TryPyPy мне нужно было добавить заголовок «Content-type» в мой запрос.

Мне пришлось удалить символы новой строки и перевода строки из моей строки аутентификации.

auth_string = base64.encodestring('%s:%s' % (username, password)).strip()
...