在Python中的requests.post()中将变量作为数据参数发送

时间:2017-07-31 18:15:24

标签: python post python-requests servicenow servicenow-rest-api

我试图将变量传递给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,然后传递这样的变量,但这也会导致相同的错误。

正确方向上的一点很棒,谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

使用

data = {" asset_tag":" test1"," assigned_to":" test2",     "公司":" test3"," serial_number":serial}

答案 1 :(得分:1)

不是以字符串形式发送请求有效负载主体,而是以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})

答案 2 :(得分:1)

而不是传递data = data,而是将data作为dict并将其作为json = data传递。