2012-04-08 84 views
2

我正在尝试使用toggl api。如何使用REQUESTS包进行Python发布请求?

我使用Requests而不是Urllib2来做GETs en POSTS。但我卡住了。

payload = { 
    "project":{ 
     "name":"Another Project", 
     "billable":False, 
     "workspace":{ 
      "Name":"jorrebor's workspace", 
      "id":213272 
     }, 
     "automatically_calculate_estimated_workhours":False 
    } 
} 

url = "https://www.toggl.com/api/v6/projects.json" 
r = requests.post(url, data=json.dumps(payload), auth=HTTPBasicAuth('[email protected]', 'mypassword')) 

认证似乎很好,但有效载荷格式可能不是。

具有相同的参数curl命令:

curl -v -u heremytoken:api_token -H "Content-type: application/json" -d "{\"project\":{\"billable\":true,\"workspace\":{\"id\":213272},\"name\":\"Another project\",\"automatically_calculate_estimated_workhours\":false}}" -X POST https://www.toggl.com/api/v6/projects.json 

确实做工精细。

我的负载有什么问题?得到的回应是: [“名称不能为空”,“工作区不能为空”]

这导致我得出结论认证工作正常,但toggl无法读取我的json对象。

回答

2

看起来像你应该尝试设置标头为JSON应用程序,而不是默认格式,并发送一个JSON对象而不是Python dict。看看这里:

payload = {"project":{"name":"Another Project", 
        "billable":False, 
        "workspace":{"Name":"jorrebor's workspace", 
            "id":213272}, 
        "automatically_calculate_estimated_workhours":False 
         } } 

parameters_json = json.dumps(payload) 
headers = {'Content-Type': 'application/json') 
r = client.post(url, data=parameters_json, headers=headers) 

这应该让网站读取json对象就好了。

相关问题