从requests.post()返回的结果?

时间:2019-04-12 12:18:29

标签: python python-2.7 python-requests

我正在处理一个小型python脚本,该脚本应从icinga服务器返回一个数据列表-我可以使用curl进行工作,但是我需要使用Python。这是curl版本:

$ curl -k -s -u karl:marx -H 'Accept: application/json' -H 'X-HTTP-Method-Override: GET' -X POST 'https://zenoss.hpc.ic.ac.uk:5665/v1/objects/services' -d '{ "filter": "service.state==state && match(pattern,service.name)", "filter_vars": { "state": 2, "pattern": "*checkmem" } }' | jq '.results[].attrs | [.host_name, .name, .last_check_result.output] | @csv' | sed -e 's/.cx1.hpc.ic.ac.uk//g' -e 's/\\n/\n/g' -e 's/\"\\\"//g' -e 's/\\\",\\\"/\n/g' -e 'a ------'

我相信可以实现的python脚本是:

$ cat icinga_report
#!/usr/bin/python

import requests
import json
import sys

if len(sys.argv)==3:
    state=int(sys.argv[1])
    service=sys.argv[2]
else:
    print 'Usage: icinga_report state service'
    sys.exit()

hdr={
    'Accept':'application/json',
    'X-HTTP-Method-Override':'GET'
}
aut=(
    'karl',
    'marx'
)
url='https://zenoss.hpc.imperial.ac.uk:5665/v1/objects/services'
dat={
    'filter':'service.state==state && match(pattern,service.name)',
    'filter_vars':{
        'state':int('%d'%state),
        'pattern':'*%s'%service
    }
}

res=requests.post(
    url,
    headers=hdr,
    auth=aut,
    data=json.dumps(dat)
)

print res

但是,运行脚本的输出:

$ ./icinga_report 2 checkmem
<Response [200]>

实际上,如果我使用任何其他有效的URL,看起来就一样—我只得到响应代码。我在做什么错了?

1 个答案:

答案 0 :(得分:2)

requests.post返回一个requests.Response对象。如果要查看响应的内容,则应改为输出其content属性:

print res.content