使用urllib2向Toggl API发送json数据时出现HTTP 400错误
当我使用以下代码连接到 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 个回答
2
我已经搞明白了。多亏了TryPyPy,我发现我需要在请求中添加一个'Content-type'的头信息。
我还需要把我的认证字符串中的换行符和回车符去掉。
auth_string = base64.encodestring('%s:%s' % (username, password)).strip()
3
根据API文档,你至少缺少一个头部信息。可以试试这样:
req = urllib2.Request(url, data, {"Content-type": "application/json"})
如果这样还不行,可以尝试对数据使用urllib.urlencode。如果还是不行,就在请求中添加一个用户名和密码,就像API示例中那样。