python - ServiceNow - 如何使用 SOAP 下载报告

标签 python soap servicenow

我需要从 serviceNow 自动下载报告。

我已经能够通过以下方法使用 pythonselenium 以及 win32com 将其自动化。
https://test.service-now.com/sys_report_template.do?CSV&jvar_report_id=92a....7aa

并使用 selenium 访问 serviceNow 以及修改 firefox 默认下载选项以将文件转储到 windows 上的文件夹 机器。

但是,由于所有这些都可以移植到 linux 服务器,我们希望将其移植到 SOAPCURL

我遇到了用于 pythonserviceNowhere .

我尝试了一下,如果我使用 ServiceNow.py

中的以下内容设置网站上列出的登录名、密码和实例名称,则以下代码可以正常工作
class Change(Base):
    __table__ = 'change_request.do'

并按照 site 中列出的客户端脚本进行操作.

# Fetch changes updated on the last 5 minutes
changes = chg.last_updated(minutes=5)
#print changes client side script.

for eachline in changes:
    print eachline

但是,当我用 sys_report_template.do 替换 URL 时,出现错误

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\SOAPpy\Parser.py", line 1080, in _parseSOAP
    parser.parse(inpsrc)
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "C:\Python27\Lib\xml\sax\xmlreader.py", line 125, in parse
    self.close()
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 220, in close
    self.feed("", isFinal = 1)
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 214, in feed
    self._err_handler.fatalError(exc)
  File "C:\Python27\Lib\xml\sax\handler.py", line 38, in fatalError
    raise exception
SAXParseException: <unknown>:1:0: no element found

相关代码如下

from servicenow import ServiceNow
from servicenow import Connection
from servicenow.drivers import SOAP

# For SOAP connection
conn = SOAP.Auth(username='abc', password='def', instance='test')

rpt  = ServiceNow.Base(conn)
rpt.__table__ = "sys_report_template.do?CSV"

#jvar_report_id replaced with .... to protect confidentiality
report = rpt.fetch_one({'jvar_report_id': '92a6760a......aas'})

for eachline in report:
    print eachline

所以,我的问题是,如何才能使这项工作成功? 我在网上寻找资源和帮助,但没有找到。

感谢任何帮助。

最佳答案

经过大量研究,我能够使用以下方法从 servicenow 获取 csv 格式的报告。我想我会在这里发帖,以防其他人遇到类似问题。

import requests
import json

# Set the request parameters
url= 'https://myinstance.service-now.com/sys_report_template.do?CSV&jvar_report_id=929xxxxxxxxxxxxxxxxxxxx0c755'
user = 'my_username'
pwd = 'my_password'

# Set proper headers
headers = {"Accept":"application/json"}

# Do the HTTP request
response = requests.get(url, auth=(user, pwd), headers=headers )
response.raise_for_status()
print response.text

response.text 现在有 csv 格式的报告。
接下来我需要弄清楚,如何解析 response 对象以提取格式正确的 csv 数据。
完成后,我会在这里发布。但现在这回答了我的问题。

关于python - ServiceNow - 如何使用 SOAP 下载报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167270/

相关文章:

python - 使用 sum、np.sum 和 fsum 对数组列表求和时会得到不同的结果吗?

python 2.7/Windows : How to control position of Tkinter common dialogs?

java - 如何将 SOAP 方法转换为 Restful API?

sql-server - 在同一硬件/物理服务器上运行的应用程序服务器和 Web 服务器

servicenow - 是否有开箱即用的 SNOW(立即服务)api 来创建目录项及其变量?

javascript - CSS <td> 标签影响整个页面

python - 我可以在 python 中对具有多个条件的 if-else 语句使用嵌套的 for 循环吗?

python3.8 http.server - ConnectionResetError : [Errno 104] Connection reset by peer

Java 更新 1.6.0_26 导致 SOAP 异常 - NoClassDefFoundError :Could not initialize FastInfosetReflection

ajax - 如何从客户端脚本调用业务规则