-1

我正在尝试将变量传递给 requests.post() 中的数据字段,但我继续收到错误,

  Error Response: {'error': {'message': 'Exception while reading request', 
'detail': 'Cannod decode: java.io.StringReader@1659711'}, 'status': 'failure'}

这是我的代码

#Fill array from CSV
temp=[]
for row in csv.iterrows():
    index, data = row
    temp.append(data.tolist())


#Create new asset for all assets in CSV
for index, row in enumerate(temp):
    make = temp[index][0]
    serial = str(temp[index][1])
    date = str(temp[index][2])
    response = requests.post(url, auth=(user, pwd), headers=headers, 
    data='{"asset_tag":"test1", "assigned_to":"test2", 
    "company":"test3", "serial_number":serial}')

我最初尝试使用 CSV 直接提供它

str(temp[index][1])

这不起作用,所以我尝试分配str(temp[index][1])给变量serial,然后像这样传递变量,但这也会导致相同的错误。

一个正确的方向会很棒,谢谢!

4

3 回答 3

5

不要以字符串形式发送请求有效负载正文,而是以 json 形式传递它。requests.post 接受数据变量中的字符串和 json 变量中的 json。在尝试通过 Python 对 ServiceNow 实例进行第一次 REST 调用时,我遇到了同样的问题。希望这可以帮助。

response = requests.post(url, auth=(user, pwd), headers=headers, 
    json={"asset_tag":"test1", "assigned_to":"test2", 
    "company":"test3", "serial_number":serial})
于 2017-08-03T15:55:56.400 回答
1

与其传递 data=data,不如将 data 作为 dict 并将其作为 json=data 传递。

于 2019-12-05T08:40:05.740 回答
1

从以下内容中删除单引号:

data='{"asset_tag":"test1", "assigned_to":"test2", 
       "company":"test3", "serial_number":serial}' 

利用

data = {"asset_tag":"test1", "assigned_to":"test2", 
        "company":"test3", "serial_number":serial} 
于 2017-08-01T07:28:06.627 回答