如何在Python中为发布请求传递JSON数据?

问题描述:

我试图用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

问题可能与'jobTitle': 'Night's Watch'。而是使用"jobTitle": "Night's Watch"或者你可以逃脱与斜线的单引号,'jobTitle': 'Night\'s Watch'

+1

不,如果你使用双引号将你的字符串封装在Python中,那么你可以使用单引号而不需要转义它。 – Chandral

+0

@Chandral:兄弟,这是我传达的。您可以使用双引号或转义 –

+0

我已经在Python代码中使用了双引号。 – Chandral

在请求,通过字典来的数据参数,数据字典将自动形式编码的请求时

如果您需要JSON编码数据,使用

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

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

More complicated POST requests

执行以下操作:

import json final_data = json.dumps(new_user_data)

传递final_data。