2012-04-08 41 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對象就好了。

相關問題