2017-06-15 98 views
0

我試圖用Python的Requests模塊執行一個cURL命令,但服務器不斷返回響應代碼406,並顯示'無效的JSON數據'。下面是cURL命令以及Python代碼。如何在Python中爲發佈請求傳遞JSON數據?

捲曲

curl --data "userDetails={'userEmail':'[email protected]','org_id': '3$$4bjnNP','fName': 'Jon','lName': 'Snow','jobTitle': 'Night's Watch', 'language': 'Andal(Westeros)','userAccessView': 'Both','start_date': '30-Jan-2017','end_date': '29-Jan-2018','never_exp': false}" --cacert "C:\Users\cthakor\Desktop\User Creation\security.cer" --cookie "ASessionID='GQa3GTlLGZ8mGNH67CQvTvAz='" https://www.example.com/api/portal/createUser 

的Python

session_id_cookie = {'ASessionID': 'GQa3GTlLGZ8mGNH67CQvTvAz='} 
new_user_data = {"userDetails":{ 
          "userEmail" : "[email protected]", 
          "org_id" : "3$$4bjnNP", 
          "fName" : "Jon", 
          "lName" : "Snow", 
          "jobTitle": "Night's Watch", 
          "language" : "Andal(Westeros)", 
          "userAccessView" : "Both", 
          "start_date" : "30-Jan-2017", 
          "end_date" : "29-Jan-2018", 
          "never_exp" : False, 
          } 
         } 

r = requests.post("https://www.example.com/api/portal/createUser", 
        data=new_user_data, cookies=session_id_cookie) 
+0

使用'data = new_user_data ['userDetails']' –

+0

使用'json = new_user_data',而不是'data = new_user_data' – Clearer

+0

akashkarothiya&Clearer那沒用。 – Chandral

回答

0

問題可能與'jobTitle': 'Night's Watch'。而是使用"jobTitle": "Night's Watch"或者你可以逃脫與斜線的單引號,'jobTitle': 'Night\'s Watch'

+1

不,如果你使用雙引號將你的字符串封裝在Python中,那麼你可以使用單引號而不需要轉義它。 – Chandral

+0

@Chandral:兄弟,這是我傳達的。您可以使用雙引號或轉義 –

+0

我已經在Python代碼中使用了雙引號。 – Chandral

0

在請求,通過字典來的數據參數,數據字典將自動形式編碼的請求時

如果您需要JSON編碼數據,使用

r = requests.post(url, data=json.dumps(new_user_data)) 

r = requests.post(url, json=new_user_data) 

More complicated POST requests

0

執行以下操作:

import json final_data = json.dumps(new_user_data)

傳遞final_data。